从外部来看子类,它就像是一个与基类具有相同接口的新类,或许还会有一些额外的方法跟属性。但是继承并不只是复制基类的接口。当创建一个子类对象时,该子类对象内部会包含一个基类对象,这个被包含的对象与直接创建的基类对象是一样的,二者的区别就在于,后者来自外部,而基类的子对象被包装在到处类对象内部
public class Cartoon extends Drawing{
Cartoon(){System.out.println("Cartoon constructor");}
public static void main(String[] args) {
new Cartoon();
}
}
class Art{
Art(){System.out.println("Art constructor");}
}
class Drawing extends Art{
Drawing(){System.out.println("Drawing constructor");}
}
/*输出结果:
Art constructor
Drawing constructor
Cartoon constructor
*/
由此例子可以发现,构造过程是由基类往外扩散的,所有基类在导出类构造器可以访问它之前,就已经完成了初始化。即使你不为Cartoon()创建构造器,编译器也会为你合成一个默认的构造器,该构造器将调用基类的构造器