A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 月老~牵红线 中级黑马   /  2014-11-6 17:56  /  1094 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  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呢?

9 个回复

倒序浏览
子类没有重写getShow()方法。粗心。
回复 使用道具 举报
楼上说的什么啊!!
因为父类那个return zifu,有个隐藏指引this. return this.zifu
子类继承了就变成super.zifu了。

其实我也忘了,看了运行结果才想起来{:3_48:}
回复 使用道具 举报
函数可以继承,,但变量是赋值后是特有的,
回复 使用道具 举报
它是发现自己的类中没有函数,那么就到父类中,进行查找函数,发现父类中有。而父类中的函数:return 中省略了super.zifu; 那么就自动默认了父类中成员变量。

这个主要是堆内存以及方法区中的关于继承的原理
回复 使用道具 举报
cs8630323 发表于 2014-11-7 02:42
楼上说的什么啊!!
因为父类那个return zifu,有个隐藏指引this. return this.zifu
子类继承了就变成super ...

想要输出第二种结果,只有在子类中再写一次getShow方法吗?
回复 使用道具 举报
zhangyangLengen 发表于 2014-11-7 07:15
它是发现自己的类中没有函数,那么就到父类中,进行查找函数,发现父类中有。而父类中的函数:return 中省 ...

这个视频了讲了吗?还是自己看书上的,我怎么见过,,感觉自己好low
回复 使用道具 举报
zhangyangLengen 发表于 2014-11-7 07:15
它是发现自己的类中没有函数,那么就到父类中,进行查找函数,发现父类中有。而父类中的函数:return 中省 ...

稍微有些明白了。后来我把getShow方法在子类中重写了,就输出第二种结果,这是不是就可以理解为:一个方法在使用某一个变量的时候,是使用和它在同一个类中被声明的那个变量。
回复 使用道具 举报
对,没有复写父类的方法
回复 使用道具 举报
这个需要复写父类的getshow方法的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马