类的复用

1.java代码的复用方式

  1. 继承
    • 初始化基类
      导出类对象包含一个基类的子对象,因此导出类初始化之前,编译器首先调用基类的构造器对基类进行初始化。如果基类构造函数带参数,那么导出类的构造函数中需要显示的利用super关键字调用基类构造器(因为需要显示的给出传入的参数列表)。
  2. 组合
    新类中包含现已存在的类的引用。那么,若要初始化这些对象可以通过三种方式:第一,在类定义对象的地方,使用new关键字直接初始化。这意味在构造器调用之前被初始化;第二,在构造器中初始化;第三,在要使用该对象之前。

2.代理

既暴露基类的方法,又在导出类中包含基类的引用。

3.组合与继承之间的选择

组合用于想在新类中使用现有类的功能而非现有类的接口,即在现有类中嵌入某个对象,让新类实现实现所需要的功能,但新类用户看到的只是新类所定义的接口,而非嵌入对象的接口。因此,为实现此结果,需要在新类中嵌入一个private的现有类对象。
但也有另一种情况,允许新类的用户访问现有类对象,这种情况下,只要现有类隐藏了自身的具体实现,那么这种做法就是安全的。使现有成员称为public有助于用户了解如何使用新类。

4.protected

就类用户而言,它是private;然而,对于继承与此类的导出类或者位于同一个包内的类来说,它是可以访问的(protected提供了包内访问权限)。

5.向上转型

新类是现有类的一种类型。由于导出类确保基类中所有的方法在导出类同样有效,所以向基类中发送的消息同样可以向导出类发送。
在向上转型的过程中,类接口唯一可能发生的事情是丢失方法

6.final

编译常量:这种情况有两点要求,第一,必须是基本类型,第二,定义时必须初始化。
运行常量:在运行时被初始化,且不能被改变。
当对对象的引用使用final时,表示引用恒定不变,引用本身不可变,被引用的对象是可变的。
final方法:private方法默认带final修饰。且final修饰的方法不允许被覆盖。

你可能感兴趣的:(类的复用)