新建三个类A,B,C 其中B继承C 为了方便观察,我们重写B和C的构造方法 如下:
2.当我们直接创建一个B和C的实例对象 观察控制台的输出,可知当C继承B类 子类C创建实例对象时,会先执行基类B的无参构造方法,然后执行自己的构造方法。而单独创建基类B实体对象时则只执行本类的构造方法。
3.子类的构造方法中隐藏了代码super(); 就算不写,编译时也会被系统添加上去 做测试,创建子类对象时,我们调用基类的有参构造方法 结果如下:
由图可知,子类调用基类的方法是通过关键字super完成的,且子类构造方法调用超类构造方法时只能调用一个构造方法,并写在“第一行“ 下图则是错误的写法。
关于子类中的普通方法能否直接调用基类的构造方法,显然是不行的,普通方法并未对基类有初始化的操作,不存在这种写法。
4.关于本类构造方法的调用,通过关键字this来完成的,不同的形参决定构造方法的不同,当然也不存在构造方法本身调用自己的情况。注:构造函数的调用语句,必须在第一句。
也有同学会疑惑,基类构造方法如何调用子类的构造方法?没有关键字来调用,也没有隐性代码初始化子类。可能有同学会这样写:
这样设想输出的结果是:先输出c的无参构造方法 然后是b的无参构造方法。
实际上这样写是完全错误的。会引起StackOverflowError的问题(堆栈溢出) 玩笑来说:”只能通过儿子找爸爸,不能爸爸追着儿子跑“ 本文就不再深入探讨。
反正关于构造方法之间的调用大致就这些东西。那先这样把,告辞!
閱讀更多 十二說IT 的文章