public class Art {
Art ()
{
System.out.println("art");
}
}
public class Drawing extends Art {
public static void main (String arg[])
{
Drawing drawing = new Drawing(); //没有构造函数,自动调用父类构造函数,那么其实是他自己的默认构造函数调用了父类;因为什么?需要父类初始化啊;即便父类的构造函数也不存在初始化,也必须调用,万一初始化了呢;
//另外,假设不调用父类,大概,就不能称之为子类了;因为你完全没有继承过程啊
}
}
```
## ## 关于销毁顺序
其实也很好理解,创造是自上到下,销毁肯定是自下而上;
## ## 初始化的真实顺序
1. 在所有之前,将分配给对象的存储空间初始化为二进制零;
2. 从父类开始调用构造函数;
3. 按照声明顺序调用成员的初始化;
4. 子类构造函数主体开始
## ## 协变返回
目前不知道有啥用。。。。
## ## 用继承进行设计
```java
class Actor {
public void act() {
}
}
class HappyActor extends Actor {
public void act() {
System.out.println("HappyActor");
}
}
class SadActor extends Actor {
public void act() {
System.out.println("SadActor");
}
}
class Stage {
private Actor actor = new HappyActor(); //父类的神奇用法
public void change() { //类型转换
actor = new SadActor();
}
public void performPlay() {
actor.act();
}
}
public class Transmogrify {
public static void main(String[] args) {
Stage stage = new Stage();
stage.performPlay();
stage.change();
stage.performPlay();
}
}