TIJ-4Edition-复用类

1、组合和继承

  A is-a B:A、B本质上是一个东西。——继承

  A has-a B: B是A的一部分,但它们不是一回事。——组合

  组合复用了功能,而非形式。

  继承不只是复制基类的接口和字段,当创建一个导出类对象时,该对象中包含了一个基类的子对象

  所以,要对基类子对象进行初始化,在导出类构造器中调用基类的构造器。

  编译器会在导出类构造器中插入对基类默认构造器的调用。

  构造过程是从基类开始的往下扩散的。

  父类没有默认构造器时,就要显式地用super关键字调用带参构造器。

2、代理

  代理像是继承和组合的这种,更偏向于组合一点。

  我们可以用一个代理对象封装目标对象的功能,可以使功能更加的纯粹(只暴露出我们想要的)。

3、结合使用继承和组合

  1、名称屏蔽

    子类重载父类方法时,不会屏蔽父类的方法。它们会同时存在。

  2、protected关键字

    protected关键字修饰的域只有在导出类同包的类中才能访问。

  3、向上转型

    沿接口树向上转或沿继承链向上转。

  4、final关键字

    1、永不改变的编译时常量。

    2、运行时被初始化的值,但是希望它初始化就不改变。

    static final修饰的域只能占据一段不能改变的存储空间。这时它就是一个编译时常量,必须在定义时赋值。

    编译时常量的初始值会被保存在Class文件的ConstantValue属性中。因此能在类加载时进行初始化。

    final修饰的引用不能被修改,但是引用指向的对象是可以修改的。

    final修饰的在继承中方法不能被重写

    private方法都是默认为final的,因此也无法被重写。(都不能访问,怎么能允许重写)

    final修饰的类不能被继承

4、继承中的初始化顺序

  父类静态代码块 > 子类静态代码块 > 父类代码块 > 父类代码块 > 父类构造器 > 子类代码块 > 子类构造器

     

posted @ 2021-09-17 12:49  Lqblalala  阅读(36)  评论(0编辑  收藏  举报