第7章 复用类 - 《Java编程思想》读书笔记
第7章 复用类
目录
7.2 继承语法
7.2.1 初始化基类
- Java会自动在导出类的构造器中插入对基类构造器的调用
- 如果没有默认的基类构造器,就必须用super显式地调用基类构造器
7.3 代理
- 太空船控制模块:
public class SpaceShipControls{
void forward(int velocity){}
void back(int velocity){}
}
- 可以使用继承的方式构造太空船
public class SpaceShip extends SpaceShipControls{
private String name;
public SpaceShip(String name){
this.name = name;
}
public static void main(String[] args){
SpaceShip protector = new SpaceShip("NSEA Protector");
protector.forward(100);
}
}
- 但SpaceShip并非真正的SpaceShipControls类型
- 事实上,SpaceShip包含了SpaceShipControls,却可以直接使用SpaceShipControls中的方法
- 代理:将一个成员置于所要构造的类中(就像组合),但与此同时,在新类中暴露了该成员对象的所有方法(就像继承)
public class SpaceShipDelegation{
private String name;
private SpaceShipControls controls = new SpaceShipControls();
public SpaceShipDelegation(String name){
this.name = name;
}
void forward(int velocity){
controls.forward(velocity);
}
void back(int velocity){
controls.back(velocity);
}
public static void main(String[] args){
SpaceShipDelegation protector = new SpaceShipDelegation("NSEA Protector");
protector.forward(100);
}
}
7.7 向上转型
7.7.2 再论组合与继承
- 如果必须向上转型,则继承是必要的
- 如果不需要向上转型,则应当好好考虑自己是否需要继承
7.8 final关键字
7.8.1 final数据
-
编译时常量:编译器可以将常量值代入任何可能用到它的计算式中,减轻运行时的负担
-
在Java中,使用final关键字修饰编译时常量,必须是基本类型(引用不变,但指向的对象可以变,意义不大),定义时必须赋值
-
既是static又是final的常量至占据一段不能改变的存储空间,通常用大写表示,并用下划线分割单词
-
final参数:无法在方法中更改参数并用所指向的对象
7.8.2 final方法
- 使方法的行为保持不变,并且不会被重写
- 在Java的早起实现中, final方法可以转为内嵌调用,提高效率,但现在不需要这么做
- 所有private方法都隐式地指定为final
7.8.3 final类
- final类不允许继承,数据可以选择是否final,方法默认final

浙公网安备 33010602011771号