黑马程序员技术交流社区

标题: 关于父类成员的复写 [打印本页]

作者: 月老~牵红线    时间: 2014-11-6 17:56
标题: 关于父类成员的复写
  1. class Fu
  2. {
  3.         public String zifu="The parclass";
  4.         public String getShow()
  5.         {
  6.                 return zifu;
  7.         }
  8. }
  9. class Zi extends Fu
  10. {
  11.         public String zifu="The subclass";
  12. }
  13. class Test
  14. {
  15.         public static void main(String[] args)
  16.         {
  17.                 Fu fu=new Fu();
  18.                 System.out.println(fu.getShow());
  19.                 Zi zi=new Zi();
  20.                 System.out.println(zi.getShow());               
  21.         }
  22. }
复制代码
为什么运行的结果是
The parclass
The parclass
而不是
The parclass
The subclass呢?


作者: shileishihai    时间: 2014-11-6 18:50
子类没有重写getShow()方法。粗心。
作者: cs8630323    时间: 2014-11-7 02:42
楼上说的什么啊!!
因为父类那个return zifu,有个隐藏指引this. return this.zifu
子类继承了就变成super.zifu了。

其实我也忘了,看了运行结果才想起来{:3_48:}
作者: 高昌德    时间: 2014-11-7 07:06
函数可以继承,,但变量是赋值后是特有的,
作者: zhangyangLengen    时间: 2014-11-7 07:15
它是发现自己的类中没有函数,那么就到父类中,进行查找函数,发现父类中有。而父类中的函数:return 中省略了super.zifu; 那么就自动默认了父类中成员变量。

这个主要是堆内存以及方法区中的关于继承的原理
作者: 月老~牵红线    时间: 2014-11-7 08:55
cs8630323 发表于 2014-11-7 02:42
楼上说的什么啊!!
因为父类那个return zifu,有个隐藏指引this. return this.zifu
子类继承了就变成super ...

想要输出第二种结果,只有在子类中再写一次getShow方法吗?
作者: 高昌德    时间: 2014-11-7 09:00
zhangyangLengen 发表于 2014-11-7 07:15
它是发现自己的类中没有函数,那么就到父类中,进行查找函数,发现父类中有。而父类中的函数:return 中省 ...

这个视频了讲了吗?还是自己看书上的,我怎么见过,,感觉自己好low
作者: 月老~牵红线    时间: 2014-11-7 09:24
zhangyangLengen 发表于 2014-11-7 07:15
它是发现自己的类中没有函数,那么就到父类中,进行查找函数,发现父类中有。而父类中的函数:return 中省 ...

稍微有些明白了。后来我把getShow方法在子类中重写了,就输出第二种结果,这是不是就可以理解为:一个方法在使用某一个变量的时候,是使用和它在同一个类中被声明的那个变量。
作者: 想成为黑马    时间: 2014-11-7 09:31
对,没有复写父类的方法
作者: wf111sxwf    时间: 2014-11-7 10:40
这个需要复写父类的getshow方法的




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2