关于java中基类和子类构造方法相互调用示例

  1. 新建三个类A,B,C 其中B继承C 为了方便观察,我们重写B和C的构造方法 如下:

关于java中基类和子类构造方法相互调用示例

2.当我们直接创建一个B和C的实例对象 观察控制台的输出,可知当C继承B类 子类C创建实例对象时,会先执行基类B的无参构造方法,然后执行自己的构造方法。而单独创建基类B实体对象时则只执行本类的构造方法。

关于java中基类和子类构造方法相互调用示例

3.子类的构造方法中隐藏了代码super(); 就算不写,编译时也会被系统添加上去 做测试,创建子类对象时,我们调用基类的有参构造方法 结果如下:

关于java中基类和子类构造方法相互调用示例

由图可知,子类调用基类的方法是通过关键字super完成的,且子类构造方法调用超类构造方法时只能调用一个构造方法,并写在“第一行“ 下图则是错误的写法。

关于java中基类和子类构造方法相互调用示例

关于子类中的普通方法能否直接调用基类的构造方法,显然是不行的,普通方法并未对基类有初始化的操作,不存在这种写法。

关于java中基类和子类构造方法相互调用示例

4.关于本类构造方法的调用,通过关键字this来完成的,不同的形参决定构造方法的不同,当然也不存在构造方法本身调用自己的情况。注:构造函数的调用语句,必须在第一句。

关于java中基类和子类构造方法相互调用示例

也有同学会疑惑,基类构造方法如何调用子类的构造方法?没有关键字来调用,也没有隐性代码初始化子类。可能有同学会这样写:

关于java中基类和子类构造方法相互调用示例

这样设想输出的结果是:先输出c的无参构造方法 然后是b的无参构造方法。

实际上这样写是完全错误的。会引起StackOverflowError的问题(堆栈溢出) 玩笑来说:”只能通过儿子找爸爸,不能爸爸追着儿子跑“ 本文就不再深入探讨。

反正关于构造方法之间的调用大致就这些东西。那先这样把,告辞!


分享到:


相關文章: