黑马程序员技术交流社区

标题: 关于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()相同。
参考如下代码:
  1. class C {
  2.         public C () {
  3.                 //这边隐式调用super(),即Object的构造器
  4.                
  5.                 System.out.println("C");
  6.         }
  7. }

  8. class B extends C {
  9.         public B () {
  10.                 //这边隐式调用super(),即C的构造器
  11.                
  12.                 System.out.println("B");
  13.         }
  14. }

  15. class A extends B {
  16.         public A () {
  17.                 //这边隐式调用super(),即B的构造器
  18.                
  19.                 System.out.println("A");
  20.         }
  21. }

  22. public class TClass {
  23.         public static void main(String[] args) {
  24.                 new A();
  25.         }
  26. }
复制代码

运行结果为:
C
B
A





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2