Thinking in java 第9章 接口
9.1 抽象类和抽象方法
1. 抽象类是普通类与接口之间的一种中庸之道。
2. 有抽象方法的类一定要是抽象类,抽象类可以有有非抽象方法。抽象方法只需声明方法体。
3. 抽象类和抽象方法的意义:
- 可以使类的抽象性明确起来,并告诉用户和编译器打算怎样来使用它们。
- 重要的重构工具,使我们可以很容易地将公共方法沿着继承层次结构向上移动。
9.2 接口
1. 接口允许人们通过创建一个能够被向上转型为多种基类的类型,来实现类似多重继承的特性。
2. 接口隐式是static和final的。
9.3 完全解耦
1. 如果某个继承结构以外的类想要用里面的方法,就会很麻烦,而接口可以在很大程度上放宽这种限制,使得可复用性更好。
9.4 Java中的多继承
1,.可以继承任意多个接口,并可以向上转型为每个接口,因为每一个接口都是一个独立的类型。
2. 使用接口的核心原因:为了能够向上转型为多个基类型(以及由此而带来的灵活性)。另一方面可以防止客户端程序员创建该类的对象。
3. 如果要创建不带任何方法定义和成员变量的基类,那么久应该选择接口而不是抽象类。
9.5 通过继承来扩展接口
1. 使用extends来扩展接口。
2. 基类和接口的方法名相同时,当只有返回类型不同时会报错。
9.6 适配接口
1. Scanner类的构造器接受的就是一个Readable接口,若要让Scanner可以作用于它,就让它成为Readable,并重写public int read(CharBuffer cb)方法。在read内部,将输入内容添加到CharBuffer参数中,或者在没有任何输入时返回-1。(例P182-183)。
9.7 接口中的域
1. 放入接口中的任何域都是static和final的(方法是public的),在Java SE5之前会由此来创建常量组工具,之后被enum替代。
9.8 嵌套接口
1. 接口可以嵌套在类或其他接口之中(应用格式为例:implements A.B)
2. 类中可以嵌套private类的接口,可以强制该接口中的方法定义不要添加任何类型信息(不允许向上转型),且其不能在定义它的类之外被实现。
3. 在接口中嵌套时,所有的接口元素必须是public的,不能声明为private。
9.9 接口与工厂
1. 理论上通过工厂方法设计模式,代码将完全与接口的实现分离,这就使得我们可以透明地将某个实现替换为另一个实现。(例P187)。工厂类用工厂接口返回一个实现接口,实现类用实现接口实现具体操作。
练习:
练习1:修改第8章练习9中的Rodent,使其成为一个抽象类。只要有可能们就将Rodent的