黑马程序员技术交流社区

标题: 继承 -构造函数的问题 [打印本页]

作者: 雯雯暖暖    时间: 2014-9-3 20:01
标题: 继承 -构造函数的问题
  1. class Fu
  2. {
  3.         Fu(){
  4.                 show();
  5.         }
  6.         void show()
  7.         {
  8.                 System.out.println("fu show");
  9.         }
  10. }

  11. class Zi extends Fu{
  12.         int num=8;
  13.         Zi(){
  14.                 super();
  15.         }
  16.         void show()
  17.         {
  18.         System.out.println("zi show  "+num);
  19.         }
  20. }
复制代码


各位大神,为什么Zi z=new Zi();的结果是 zi show   0, 我的理解是fu show.求教!
作者: xiayoutianxia    时间: 2014-9-3 20:23
你子类把父类的show方法覆盖了啊
作者: 她只是过客    时间: 2014-9-3 21:03
第一个问题,输出子类的show而不输出父类的show();父类里面的构造函数里,第一句是super(),也就是继承的Object,再下一句是显示初始化,而父类里面没有任何可显示初始化的成员变量,再下一句是show();,而子类的show()覆盖了父类的show();,在执行第四行的时候就直接执行子类的show();了,第二个问题,子类还没有显示初始化呢,所以num并没有值,而是默认的0.
作者: 范鹏霄    时间: 2014-9-3 21:09
本帖最后由 范鹏霄 于 2014-9-3 21:10 编辑

因为实例化子类调用的是父类的构造方法,super()就是调用父类构造方法
作者: wenjd0000    时间: 2014-9-3 22:47
多态真乱 越看越不懂了
作者: lq你微笑时好美    时间: 2014-9-3 23:53
这是方法重写啊,子类重写父类方法,所以输出zi show.还有就是父类没有成员变量,子类访问不到,输出默认值0
作者: lq你微笑时好美    时间: 2014-9-3 23:56
简单易懂…多态真是绕的晕晕的
作者: 天邃任我桓    时间: 2014-9-4 21:37
new的是构造方法,子类复写父类构造方法,但开始是默认初始化没有显示初始化所以结果就是0




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