黑马程序员技术交流社区
标题:
关于A,B,C三者多层继承的问题
[打印本页]
作者:
宋美成
时间:
2014-3-15 13:05
标题:
关于A,B,C三者多层继承的问题
对于两个的继承,我比较明白;但是上了三个就不知道了
前提:如果A继承B,B继承C;
问题:1.在孙子类(A)建立对象的时候,会调用父类(B)的构造函数(因为存在隐式语句SUPER()),但是A会自动调用爷爷类(C)的构造函数吗?如果可以调用那它的原理是什么啊,是不是也存在一个类似于super的语句呢?
作者:
630681386@qq.co
时间:
2014-3-15 13:34
爸爸的构造方法中第一句也有super();爸爸的会自动调用爷爷的
作者:
dapeng111
时间:
2014-3-15 13:38
可以的。因为A中有父类B隐式的super(),同理父类B也会有它的父类C的隐式的super()。通过这种一级级的继承的方式实现调用爷爷类(C)中的构造函数。
作者:
水蓝
时间:
2014-3-15 13:54
这种多重继承的情况下:
虚拟机是要给这三个类都分配内存空间的。
也就是说:
1、调用A的构造函数(如果B有无参构造函数),则A的构造器的第一行,隐式调用B的构造函数即效果与super()
相同。
2、当B的构造函数被调用,则B的构造器的第一行,隐式调用C的构造函数,即效果也与super()相同。
参考如下代码:
class C {
public C () {
//这边隐式调用super(),即Object的构造器
System.out.println("C");
}
}
class B extends C {
public B () {
//这边隐式调用super(),即C的构造器
System.out.println("B");
}
}
class A extends B {
public A () {
//这边隐式调用super(),即B的构造器
System.out.println("A");
}
}
public class TClass {
public static void main(String[] args) {
new A();
}
}
复制代码
运行结果为:
C
B
A
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2