7.2继承
总结 当创建一个子类对象时,该对象包含了父类当子对象,这个子对象和直接使用基类创建对象是一样当,二者区别是后者来自外部,而基类的子对象被包装在子类的对象内部(会先调用父类的构造函数)
总结 类加载顺序
Java代码中一个类初始化顺序:static变量 -- 其他成员变量 -- 构造函数 三者的调用先后顺序:
初始化父类Static --> 子类的Static (如果是类实例化,接下来还会: 初始化父类的其他成员变量->父类构造方法->子类其他成员变量->子类的构造方法)。
系统默认值的给予比通过等号的赋予先执行。
一个类中的static变量或成员变量的初始化顺序,是按照声明的顺序初始化的。
7.2.1初始化基类
父类Art
package main.chapter7;
/**
* 父类
*
* @author
* @create 2019-04-08 下午8:53
**/
public class Art {
public Art(String s) {
System.out.println("art constructor");
}
}
Drawing继承Art
package main.chapter7;
/**
* extends art
*
* @author
* @create 2019-04-08 下午8:53
**/
public class Drawing extends Art {
public Drawing() {
super("234");
System.out.println("drawing constructor");
}
}
Cartoon继承Drawing
package main.chapter7;
/**
* extends drawing
*
* @author
* @create 2019-04-08 下午8:54
**/
public class Cartoon extends Drawing{
public Cartoon() {
System.out.println("drawing constructor");
}
public static void main(String[] args){
new Cartoon();
}
}
注意:默认是会调用父类的无参构造函数的,所以需要显式的使用super构造函数打通调用链
7.3代理
package main.chapter7;
/**
* 方向盘
*
* @author
* @create 2019-04-08 下午9:13
**/
public class SpaceShipController {
void up(int velocity){}
void down(int velocity){}
void right(int velocity){}
void left(int velocity){}
}
代理类:
package main.chapter7;
/**
* 代理类
*
* @author
* @create 2019-04-08 下午9:15
**/
public class SpaceShipDelegation {
private SpaceShipController spaceShipController = new SpaceShipController();
public void up(int velocity) {
spaceShipController.up(velocity);
}
public void down(int velocity) {
spaceShipController.down(velocity);
}
public void right(int velocity) {
spaceShipController.right(velocity);
}
public void left(int velocity) {
spaceShipController.left(velocity);
}
}
注意:idea里面command+N可以选择创建代理方法,很方便
![](https://img.haomeiwen.com/i4210129/e37b83b0ddf1173d.png)
网友评论