构造函数中继承的几种方式

 我来答
匿名用户
2018-07-07
展开全部
java继承中对构造函数是不继承的,只是调用(隐式或显式)。举例说明: public class FatherClass { public FatherClass() { System.out.println(100); } public FatherClass(int age) { System.out.println(age); } } public class SonClass extends FatherClass{ public SonClass() { } public SonClass(int c) { System.out.println(1234); } public static void main(String[] args) { SonClass s = new SonClass(66); } } 编译后执行结果如下:分析:SonClass s = new SonClass(66); 执行这句时,调用 public SonClass(int c) { System.out.println(1234);//系统会自动先调用父类的无参构造函数(super()) } 在这个构造函数中,等价于 public SonClass(int c) { super();//必须是第1行,否则不能编译 System.out.println(1234); } 所以结果是 100 1234 在创建子类的对象时,Java虚拟机首先执行父类的构造方法,然后再执行子类的构造方法。在多级继承的情况下,将从继承树的最上层的父类开始,依次执行各个类的构造方法,这可以保证子类对象从所有直接或间接父类中继承的实例变量都被正确地初始化。 3.如果子类构造函数是这样写的 public SonClass(int c) { super(22);//必须是第1行,否则不能编译 //显式调用了super后,系统就不再调用无参的super()了; System.out.println(1234); } 执行结果是 22 1234 总结1:构造函数不能继承,只是调用而已。如果父类没有无参构造函数创建子类时,不能编译,除非在构造函数代码体中第一行,必须是第一行显式调用父类有参构造函数如下: SonClass (){ super(777);//显示调用父类有参构造函数 System.out.println(66); } 如果不显示调用父类有参构造函数,系统会默认调用父类无参构造函数super(); 但是父类中没有无参构造函数,那它不是不能调用了。所以编译就无法通过了。总结2:创建有参构造函数后,系统就不再有默认无参构造函数。如果没有任何构造函数,系统会默认有一个无参构造函数。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式