问题描述
父类Person,有无参构造方法Person(),和公用方法func().子类Teacher,有无参构造方法Teacher(),有参构造方法Teacher(int a)和公用方法func(). 代码如下: class Teacher extends Person {public Teacher() {super();}public Teacher(int a) {System.out.print(a);}public void func() {System.out.print("2,");}public static void main(String[] args) {Teacher t1 = new Teacher();Teacher t2 = new Teacher(3);}}class Person {public Person() {func();}public void func() {System.out.print("1,");}} 题目是問运行结果是什么? 我的理解如下:从主方法入手,声明Teacher类的实例t1和t2,其中t1使用无参构造方法Teacher()进行初始化,而Teacher()中使用super(),即使用父类Person中无参构造方法Person(),在这个父类的构造方法中调用了func().所以,实例t1输出是:1, .在实例t2中,使用有参构造方法Teacher(int a)进行初始化.所以,实例t2输出是:3 所以猜测的运行结果应该为1,3 实际运行结果为:2,2,3 我的疑问是:为什么会在使用了super()的情况下,调用的func()却是子类中的func()?而且是调用了两次?望各位大神解答. 问题补充:<div class="quote_title">Wind_ZhongGang 写道</div><div class="quote_div"><div class="quote_title">引用</div><div class="quote_div"> 我的疑问是:为什么会在使用了super()的情况下,调用的func()却是子类中的func()?而且是调用了两次?望各位大神解答.</div><br /><br />继承构造函数是从上往下构造,也就是说先构造父类再构造子类,这样就出现两次func调用。</div><br /><br />也就是説.在调用子类Teacher的构造方法生成实例t1和t2时,首先都要调用父类的构造方法,然后再使用子类自己的构造方法生成实例.所以,才会得到这样的运算结果.谢谢你!
解决方案
引用 我的疑问是:为什么会在使用了super()的情况下,调用的func()却是子类中的func()?而且是调用了两次?望各位大神解答.继承构造函数是从上往下构造,也就是说先构造父类再构造子类,这样就出现两次func调用。