中易网

java的继承中的构造方法

答案:3  悬赏:70  
解决时间 2021-01-18 11:27
  • 提问者网友:椧運幽默
  • 2021-01-18 01:08
java的继承中的构造方法
最佳答案
  • 二级知识专家网友:傲气稳了全场
  • 2021-01-18 02:27
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:创建有参构造函数后,系统就不再有默认无参构造函数。
如果没有任何构造函数,系统会默认有一个无参构造函数。
全部回答
  • 1楼网友:一把行者刀
  • 2021-01-18 03:39
你好,根据你说的情况,不会自动调用T()
追问:如果子类构造方法已经调用了带参数的父类构造方法,就不会调用空参数的了么?不是说创建对象时要调用父类的构造方法么?带着同样的空参数不用将父类的拉到子类中么?
  • 2楼网友:撞了怀
  • 2021-01-18 02:48
首先他是去找父类,构造方法用于创建实例,你反过来想, 你继承一个父类,如果不去父类的构造方法,那么父类就不能实例化,那你继承谁去啊?所以就好比这个思想一样 ,现有父后有子一样的思想. 不管怎么掉,如果你手动的调用了父类里的有参数的,那么就调实例化父类一次.如果你没手动去调父类的构造方法, 那么子类的隐含的构造方法上面会有一个隐含的super(),去实例化父类再实例化子类,
个人理解
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息