gzq44 发表于 2020-10-19 09:21:45

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

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?

2269099035 发表于 2020-10-19 09:21:46

gzq44 发表于 2020-10-19 22:24
我就卡void setSIM(SIM card)
      {
                sim = card;


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

gzq44 发表于 2020-10-19 09:22:44

方法和复用这里看着好乱,照着书上抄了一个还运行不了

2269099035 发表于 2020-10-19 10:40:13

一个.java文件,只能有一个public class

2269099035 发表于 2020-10-19 10:49:13

public class act
{
      public static void main(String[] args)
      {
                MobileTelephone mobile = new MobileTelephone();
                SIM sinOner = new SIM(13889776509L);
                mobile.setSIM(sinOner);
                System.out.println("手机号码:"+mobile.lookNumber());
                SIM simtwo = new SIM(15967563567L);
                mobile.setSIM(simtwo);
                System.out.println("手机号码:"+mobile.lookNumber());
      }
}

class SIM
{
      long number;
      SIM(long number)
      {
                this.number = number;
      }
      long getNumber()
      {
                return this.number;
      }
}

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

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

gzq44 发表于 2020-10-19 11:55:13

能解释下组合的使用吗,主要是这个

2269099035 发表于 2020-10-19 13:41:02

gzq44 发表于 2020-10-19 11:55
能解释下组合的使用吗,主要是这个

啥意见????那几个类的相互调用????

gzq44 发表于 2020-10-19 19:04:15

2269099035 发表于 2020-10-19 13:41
啥意见????那几个类的相互调用????

方式啊

gzq44 发表于 2020-10-19 19:05:05

2269099035 发表于 2020-10-19 10:49


不行仍是报错,不止这个问题,我按你的代码还是不能运行

gzq44 发表于 2020-10-19 19:19:30

好像都不太懂我的意思,像这个手机卡的代码若主class里MobileTelephone mobile = new MobileTelephone();
mobile.setSIM(sinOner);
mobile.setSIM(simtwo);去掉有无什么样子的影响?不也可以输出??

2269099035 发表于 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就没用呗。没理解你想表达啥。还有,你把自己的报错贴出来,我这里是正常的。

gzq44 发表于 2020-10-19 20:09:01

{:10_292:}

gzq44 发表于 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;
      }这个部分怎么理解??

2269099035 发表于 2020-10-19 22:10:03

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

代码是你写的,啥作用你自己定义啊{:10_277:}。这个不就是相当于是一个赋值吗。把card对象传给sim对象

gzq44 发表于 2020-10-19 22:24:24

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

这不是我写的,我抄书上的想来试试删掉会发生什么无奈一直运不了

gzq44 发表于 2020-10-19 22:24:57

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

我就卡void setSIM(SIM card)
      {
                sim = card;
      }
这个部分

一枚丶学渣 发表于 2020-10-20 20:46:04

你mobile没有定义为mobilephone的对象吧

gzq44 发表于 2020-10-21 08:25:31

2269099035 发表于 2020-10-20 00:19
你上面的错误,是你public class跟文件名不一样。。。。。。

改好了,可以运行

slience_缄默 发表于 2020-10-26 10:19:24

本帖最后由 slience_缄默 于 2020-10-26 10:43 编辑

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

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

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

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

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

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

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

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

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

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

其实很多时候不用太过于纠结为啥可以去这么实现,你只要记住这个实现方式它可以完成这个设计,重要的是编程思想,代码实现方式它只是我们的java之父定义的一个规则约定而已。

slience_缄默 发表于 2020-10-26 10:45:38

代码敲多了就能慢慢悟到了,面向对象的思维非两三年的编码经验不能悟得。没啥好纠结的,多敲代码就行了。
页: [1] 2
查看完整版本: 帮忙讲清楚方法的组合和复用+一些代码错误