鱼C论坛

 找回密码
 立即注册
查看: 6120|回复: 21

[已解决]帮忙讲清楚方法的组合和复用+一些代码错误

[复制链接]
发表于 2020-10-19 09:21:45 | 显示全部楼层 |阅读模式
30鱼币
package act;
public class SIM
{
        long number;
        SIM(long number)
        {
                this.number = number;
        }
        long getNumber()
        {
                return number;
        }
}

public class MobileTelephone
{
        SIM sim;
        void setSIM(SIM card)
        {
                sim = card;
        }

        long lookNumber()
        {
                return sim.getNumber;
        }
}

public class act
{
        public static void main(String[] args)
        {
                SIM sinOner = new SIM(13889776509L);
                mobile.setSIM(simone);
                System.out.println("手机号码:"+mobile.lookNumber());
                SIM simtwo = new SIM(15967563567L);
                mobile.setSIM(simTwo);
                System.out.println("手机号码:"+mobile.lookNumber());
        }
}
这个代码运行不动,我也有试过放在三个class里运也不行
然后两页书上的的代码,那个Circle bottom那玩意就是组合吗再到getVolme()方法哪里为什么是bottom.getRadius?
最佳答案
2020-10-19 09:21:46
gzq44 发表于 2020-10-19 22:24
我就卡void setSIM(SIM card)
        {
                sim = card;

你上面的错误,是你public class跟文件名不一样。。。。。。
QQ图片20201019090446.png
QQ图片20201019090542.png
QQ图片20201019090549.png
QQ图片20201019091512.jpg
QQ图片20201019091529.jpg

最佳答案

查看完整内容

你上面的错误,是你public class跟文件名不一样。。。。。。

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-19 09:21:46 From FishC Mobile | 显示全部楼层    本楼为最佳答案   
gzq44 发表于 2020-10-19 22:24
我就卡void setSIM(SIM card)
        {
                sim = card;

你上面的错误,是你public class跟文件名不一样。。。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-10-19 09:22:44 | 显示全部楼层
方法和复用这里看着好乱,照着书上抄了一个还运行不了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-19 10:40:13 | 显示全部楼层
一个.java文件,只能有一个public class
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-19 10:49:13 | 显示全部楼层
  1. public class act
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 MobileTelephone mobile = new MobileTelephone();
  6.                 SIM sinOner = new SIM(13889776509L);
  7.                 mobile.setSIM(sinOner);
  8.                 System.out.println("手机号码:"+mobile.lookNumber());
  9.                 SIM simtwo = new SIM(15967563567L);
  10.                 mobile.setSIM(simtwo);
  11.                 System.out.println("手机号码:"+mobile.lookNumber());
  12.         }
  13. }

  14. class SIM
  15. {
  16.         long number;
  17.         SIM(long number)
  18.         {
  19.                 this.number = number;
  20.         }
  21.         long getNumber()
  22.         {
  23.                 return this.number;
  24.         }
  25. }

  26. class MobileTelephone
  27. {
  28.         SIM sim;
  29.         void setSIM(SIM card)
  30.         {
  31.                 sim = card;
  32.         }

  33.         long lookNumber()
  34.         {
  35.                 return sim.getNumber();
  36.         }
  37. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-10-19 11:55:13 From FishC Mobile | 显示全部楼层
能解释下组合的使用吗,主要是这个
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-19 13:41:02 From FishC Mobile | 显示全部楼层
gzq44 发表于 2020-10-19 11:55
能解释下组合的使用吗,主要是这个

啥意见????那几个类的相互调用????
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-10-19 19:04:15 | 显示全部楼层
2269099035 发表于 2020-10-19 13:41
啥意见????那几个类的相互调用????

方式啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-10-19 19:05:05 | 显示全部楼层

不行仍是报错,不止这个问题,我按你的代码还是不能运行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-10-19 19:19:30 | 显示全部楼层
好像都不太懂我的意思,像这个手机卡的代码若主class里MobileTelephone mobile = new MobileTelephone();
mobile.setSIM(sinOner);
mobile.setSIM(simtwo);去掉有无什么样子的影响?不也可以输出??
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-19 19:42:52 | 显示全部楼层
gzq44 发表于 2020-10-19 19:19
好像都不太懂我的意思,像这个手机卡的代码若主class里MobileTelephone mobile = new MobileTelephone();
...

你说的那三行去掉,那你把输出那里改成System.out.println("手机号码:"+sinOner.getNumber());跟System.out.println("手机号码:"+simtwo.getNumber());一样的效果啊。这样的话class MobileTelephone就没用呗。没理解你想表达啥。还有,你把自己的报错贴出来,我这里是正常的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-10-19 20:09:01 | 显示全部楼层
QQ图片20201019200649.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-10-19 20:11:38 | 显示全部楼层
2269099035 发表于 2020-10-19 19:42
你说的那三行去掉,那你把输出那里改成System.out.println("手机号码:"+sinOner.getNumber());跟System. ...

在下面了,我觉得我意思已经形容的很清楚了呀??拿手机卡来说怎么理解class MobileTelephone这个类的作用??SIM sim;
        void setSIM(SIM card)
        {
                sim = card;
        }这个部分怎么理解??
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-19 22:10:03 | 显示全部楼层
gzq44 发表于 2020-10-19 20:11
在下面了,我觉得我意思已经形容的很清楚了呀??拿手机卡来说怎么理解class MobileTelephone这个类的作 ...

代码是你写的,啥作用你自己定义啊。这个不就是相当于是一个赋值吗。把card对象传给sim对象
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-10-19 22:24:24 | 显示全部楼层
2269099035 发表于 2020-10-19 22:10
代码是你写的,啥作用你自己定义啊。这个不就是相当于是一个赋值吗。把card对象传给sim对象

这不是我写的,我抄书上的想来试试删掉会发生什么无奈一直运不了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-10-19 22:24:57 | 显示全部楼层
2269099035 发表于 2020-10-19 22:10
代码是你写的,啥作用你自己定义啊。这个不就是相当于是一个赋值吗。把card对象传给sim对象

我就卡void setSIM(SIM card)
        {
                sim = card;
        }
这个部分
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-20 20:46:04 | 显示全部楼层
你mobile没有定义为mobilephone的对象吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-10-21 08:25:31 | 显示全部楼层
2269099035 发表于 2020-10-20 00:19
你上面的错误,是你public class跟文件名不一样。。。。。。

改好了,可以运行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-26 10:19:24 | 显示全部楼层
本帖最后由 slience_缄默 于 2020-10-26 10:43 编辑

非常理解楼主的心情,当年我也是卡在这个知识点,纠结了很长时间,后来代码写得多了,才慢慢能理解。

其实这块你不理解,是因为你对面向对象的思维理解的不是很透彻。

我看到楼主定义了两个类,一个是手机卡,一个是手机。

手机卡里包含手机号,所以你在手机卡里定义了一个long类型的手机号的变量。

手机里包含手机卡,也就是说你要设置一个可以放手机卡的卡槽,你发现前面定义手机卡的时候设置手机号可以用long类型,这是java自带的一个类型,它可以用来存一串数字,但是现在手机需要手机卡类型,你需要的是一个存手机卡的类型,所以你得用你自定义的手机卡类进行引用,构建出一个抽象完整的的组合。

好了,现在类与类之前的关系你已经理解了并且抽象组合好了,现在你需要创建一台手机。

然后你用new关键字创建了一台手机,现在你想要给这台手机插上手机卡,然后发现你并没有具体的手机卡,也就是手机卡对象,

这时候你不得不又用new关键字创建一个手机卡,并且你还得给手机卡设置一个手机号,也就是给手机卡里的手机号赋值。

现在你有了一台手机,并且手机卡也有了,然后你需要把手机卡插到手机的卡槽里了。

怎么插呢?手机卡你是这么给它定义手机号,
  1. SIM(long number)
  2.         {
  3.                 this.number = number;
  4.         }
复制代码
那么手机就也是这么给它插手机卡,也就是你不理解的
  1. void setSIM(SIM card)
  2.         {
  3.                 sim = card;
  4.         }
复制代码
你会发现括号里的(SIM card)跟(long number)意义是一样的,而sim = card;和 this.number = number;也是一样的,即把右边的值赋值到左边,左边变量就是你当前的手机类里的手机卡变量。

其实很多时候不用太过于纠结为啥可以去这么实现,你只要记住这个实现方式它可以完成这个设计,重要的是编程思想,代码实现方式它只是我们的java之父定义的一个规则约定而已。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-26 10:45:38 | 显示全部楼层
代码敲多了就能慢慢悟到了,面向对象的思维非两三年的编码经验不能悟得。没啥好纠结的,多敲代码就行了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-25 21:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表