本文已参加[新人创作礼]活动,一起开启掘金创作之路。
复用类:
- 复用代码的类
一、复用类使用(有三种方式):
- 组合语法 : 将对象引用置于新类中即可.
- 继承 : 采用继承实现.
- 代理 : 想复用类的代码,但又不想暴露太多的内容.
//组合语法示例
class Soap {
private String s;
public Soap() {
System.out.println("Soap()");
}
}
public class Bath {
private Soap castille;
public Bath() {
System.out.println("Inside Bath()");
castille = new Soap();
}
public String toString() {
return "castille=" + castille;
}
}
//继承示例
//还是沿用上面的 Soap 方法
public class Bath extends Soap{
public Bath() {
super();
System.out.println("Inside Bath()");
}
}
//代理示例
//定义接口
public class SpaceShipControls{
void up(int velocity){}
void down(int velocity){}
}
//实现接口的类
public class SpaceShip extends SpaceShipControls{
private String name;
public SpaceShip(String name){this.name = name;}
public String toString(){return name;}
public static void main(String[] args){
SpaceShip protector = new SpaceShip(“NSEA Protector”);
protector.up(100);
}
}
//代理
public class SpaceShipDelegation{
private String name;
private SpaceShipControls controls = new SpaceShipControls();
public SpaceShipDelegation(String name){
this.name = name;
}
public void up(int velocity){
controls.up(velocity);
}
public void down(int velocity){
controls.down(velocity);
}
public static void main(String[] args){
SpaceShipDelegation protector = new SpaceShipDelegation(“NSEA protector”);
protector.down(100);
}
}
二、详细讲解
- 语法组合,没什么好讲的
- 代理,没什么好讲的
- 继承,讲一下
继承原理
通过看图我们知道,当子类继承父类,会继承父类中的方法表以及方法等。当子类执行父类代码的时候,会通过寻址,找到其父类的代码区,并执行其中的代码。
备注:
关于重写父类方法:
1. 如果子类重写父类的方法(如图中C类重写父类中的A1、B1方法),重写的方法不是静态方法的话,一般都会在子类中覆盖父类的方法,并将该方法的指针指向新的地址。
2. 子类中如果定义了相同名称的静态方法,并不会重写,而应该是在内存中又分配了一块给子类的静态方法,没有重写这一说。(父类的静态方法不能被子类重写,即使你写一个跟父类相同名称的静态方法,也只是在子类中创建一个新的静态方法)。
因为静态方法从程序开始运行后就已经分配了内存,也就是说已经写死了。所有引用到该方法的对象(父类的对象也好子类的对象也好)所指向的都是同一块内存中的数据,也就是该静态方法。