Thinking In Java 第七章 复用类

1、复用类:组合、继承、代理、结合使用组合和继承。

2、组合:将对象引用置于新类中,即旧类对象作为新类的成员。

3、继承:通过extends关键字实现,扩展类会获得基类中的所有域和方法(注:基类中的私有域或方法,扩展类中无法直接使用)。

4、super关键字:调用基类方法或构造器。

5、代理:Java并没有提供对它的直接支持,这是继承与组合之间的中庸之道。因为我们将一个成员对象置于所要构造的类中(就像组合),但与此同时我们在新类中暴露了该成员对象的所有方法(就像继承)。

class SpaceShipControls {
    void up(int velocity) {
    }

    void down(int velocity) {
    }

    void left(int velocity) {
    }

    void right(int velocity) {
    }

    void forward(int velocity) {
    }

    void back(int velocity) {
    }

    void turboBoost() {
    }
}

public class SpaceShipDelegation {
    private String name;
    // 成员在方法调用之前初始化
    private SpaceShipControls controls = new SpaceShipControls();

    public SpaceShipDelegation(String name) {
        this.name = name;
    }

    public void back(int velocity) {
        controls.back(velocity);
    }

    public void down(int velocity) {
        controls.down(velocity);
    }

    public void forward(int velocity) {
        controls.forward(velocity);
    }

    public void left(int velocity) {
        controls.left(velocity);
    }

    public void right(int velocity) {
        controls.right(velocity);
    }

    public void turboBoost() {
        controls.turboBoost();
    }

    public void up(int velocity) {
        controls.up(velocity);
    }

    public static void main(String[] args) {
        SpaceShipDelegation protector = new SpaceShipDelegation("NSER Protector");
        protector.forward(100);
    }
}

6、在组合与继承之间选择:“is-a”(是一个)的关系用继承来表达,“has-a”(有一个)的关系用组合来表达。

7、protected关键字:不同包的父子类之间可以访问。

8、final关键字:可能用到final的三种情况:数据、方法、类。

9、final数据:对于基本类型,final使数值恒定不变;而对于对象引用,final使引用恒定不变。一旦引用被初始化指向一个对象,就无法再把它改为指向另一个对象。然而,对象其自身却是可以被修改的,Java并未提供使任何对象恒定不变的途径。这一限制同样适用数组,它也是对象。

10、一个既是static又是final的域只占据一段不能改变的存储空间。

11、final方法,把方法锁定,以防继承类修改它的含义,在继承中不会被覆盖。

12、类中所有的private方法都隐式地指定为是final的。final方法无法被覆盖。覆盖只有在某方法的基类的接口的一部分时才会出现。即,必须能将一个对象向上转型为它的基本类型并调用相同的方法。如果某方法为private,它就不是基类的接口的一部分。

13、@Override注解可以验证是否是重写。

14、final类:final类禁止继承。

猜你喜欢

转载自blog.csdn.net/weixin_39306760/article/details/87520141