黑马程序员技术交流社区

标题: Java继承 [打印本页]

作者: 黑马19期--李    时间: 2016-2-3 13:42
标题: Java继承
在继承结构里面,子类的构造函数中使用了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了。
作者: life55    时间: 2016-2-3 14:28
这个跟重写没关系吧,主函数:Zi zi=new zi(); 有super()会先去执行父类的构造函数,父类构造函数调用方法show1();调用的是子类的show1()方法.所以打印的是Zi
作者: 好大一只    时间: 2016-2-3 14:59
super();会去调用Fu(){}
然后先去子类找Show1(),找到了就执行
作者: jdissx01    时间: 2016-2-3 15:39
  super();是调用了父类的空参函数,不是重写.这个  super();你写不写系统都会默认加上.然后子类空参构造就也有了Show1方法~Zi zi=new zi();是Zi的Show1重写了父类方法,运行时会执行子类方法.
作者: ChiCaoMa    时间: 2016-2-3 16:15
构造函数是为了初始化对象的属性。当存在继承关系的时候,子类中的构造函数(空参或者有参)都会在函数内的第一行加上super();语句,目的是初始化父类的对象属性,因为有可能子类会用到父类中的属性,所以必须先初始化父类的属性。这里肯定不是重写啦。重写要求是普通函数,且函数名相同。你这里很明显是构造函数,连返回类型都没有,甚至都没有void。你可以在构造函数中加入输出语句来判断执行的顺序。
作者: 983859111    时间: 2016-2-3 18:23
Zi zi =new Zi()  的执行流程是这样的:

1.先执行子类构造Zi();
2.而后走super();来初始化Fu类对象;
3.然后Fu类中的构造调用了show方法;
4.子类恰好又重写了show方法,又是子类的对象调用的,所以最后才会输出zi
作者: 黑马19期--李    时间: 2016-2-3 21:52
嗯嗯,大家都说得好详细,谢谢大家
作者: C.罗纳尔多    时间: 2016-2-3 23:43
上面已经说了{:2_31:}




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