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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马19期--李 中级黑马   /  2016-2-3 13:42  /  788 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在继承结构里面,子类的构造函数中使用了super();
如:
class Fu
       Fu(){
             Show1();
       }
       public void Show1(){
              System.out.println("Fu");
}
class Zi
Zi(){
          super();
}
           public void Show1(){
              System.out.println("Zi");
           }

意思应该是子类的空参重写父类的空参函数(只不过一模一样)而不应该是调用了父类的空参函数吧,不然主函数:Zi zi=new zi();打印出来的就不是Zi而是Fu了。

7 个回复

倒序浏览
这个跟重写没关系吧,主函数:Zi zi=new zi(); 有super()会先去执行父类的构造函数,父类构造函数调用方法show1();调用的是子类的show1()方法.所以打印的是Zi
回复 使用道具 举报
super();会去调用Fu(){}
然后先去子类找Show1(),找到了就执行
回复 使用道具 举报
  super();是调用了父类的空参函数,不是重写.这个  super();你写不写系统都会默认加上.然后子类空参构造就也有了Show1方法~Zi zi=new zi();是Zi的Show1重写了父类方法,运行时会执行子类方法.
回复 使用道具 举报
构造函数是为了初始化对象的属性。当存在继承关系的时候,子类中的构造函数(空参或者有参)都会在函数内的第一行加上super();语句,目的是初始化父类的对象属性,因为有可能子类会用到父类中的属性,所以必须先初始化父类的属性。这里肯定不是重写啦。重写要求是普通函数,且函数名相同。你这里很明显是构造函数,连返回类型都没有,甚至都没有void。你可以在构造函数中加入输出语句来判断执行的顺序。
回复 使用道具 举报
Zi zi =new Zi()  的执行流程是这样的:

1.先执行子类构造Zi();
2.而后走super();来初始化Fu类对象;
3.然后Fu类中的构造调用了show方法;
4.子类恰好又重写了show方法,又是子类的对象调用的,所以最后才会输出zi
回复 使用道具 举报
嗯嗯,大家都说得好详细,谢谢大家
回复 使用道具 举报
上面已经说了{:2_31:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马