thinkinginjava

第7章 复用类

2019-04-08  本文已影响0人  胡笠

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可以选择创建代理方法,很方便

image.png
上一篇 下一篇

猜你喜欢

热点阅读