|Practical Java| Chapter 6 Classes and Interfaces
interface: 仅限 public 函数和 常量, 不包含任何实现代码.
59> 运用 interfaces 支持多重继承 multiple inheritance
Java不支持 [实现上的多重继承] (multiple inheritance of implementation),
她支持 [接口上的多重继承 (multiple inheritance of interface);
所谓 [实现上的多重继承] 是通过 [扩展extending 一个以上的classes来进行的,
这种做法违背 Java 规则.
[接口上的多重继承] --- Java class 不能扩展多个classes, 却可以实现多个接口.
可以将 interface 声明式当作 [标识接口](marker interface)来运用. --- 所谓标识
接口是不含任何函数的一种 interface, 用来实现此接口的任何class一定具有某
中属性 (property).
Ex:
Java 程序库中有个 [marker interface] 是 Serializable. 她不含任何函数, 但任何classes
只要实现了她, 都被期望表现出 [可序列化](serializing).
[marker interface] 应该提供完备文档, 说明实现此接口之class应该表现的性质.
60> 避免 interfaces 中的函数发生冲突
没什么能够防止两个 interfaces 对常量使用相同的名称, 或以相同名称或signature
来声明函数.
在实现多个接口时, 如果存在同名函数在不同接口中, 则要求其 reture type 必须
一致, 而这样就会导致语义冲突, 所以接口的多继承时要注意;
至于常量, 给出完整名称即可: Golfer.lowScore.
61> 如需提供部分实现 (partial implementation), 请使用 abstract classes!
abstract class: 本身不能instantiated 的class, 但允许为其内声明的函数提供代码;
从abstract class 派生出的类如果实现了abstract 方法, 则成为 concrete class ,否则
也是abstract class;
62> 区分 interface / abstract class / 和 concrete class
63> 审慎的定义和实现 immutable classes (不可变类)
immutable Object 是一种构建好就不再变化的 Object, 在其生存周期内不可被
改变内容, 其通常用来表示字符串 / 颜色 / 数字.
基本类型 primitive Types 不是对象!
64> 欲传递或接受 mutable objects (可变对象)的object references时, 请clone()
实现 immutable class 时, 必须对传入或传出的 mutable objects 进行克隆.
------ 当对象作为函数参数传递时, 传递的是对象引用的复本.
Shallow Cloning( 浅层克隆) --- 此技术对object 进行逐位拷贝(bitwise copy),
实现一个 immutalbe class 时应遵循下列规则:
A> 声明这个class 为final;
B> 声明所有数据为 private;
C> 只提供取值函数, 不提供设值函数;
D> 在 construct 中设置所有 instance 数据;
E> 如果函数返回 references to mutable objects, 请clone 那些mutable objects;
F> 如果函数接受 references to mutalbe objects, 请clone 那些mutable objects;
G> 如果缺省得shallow clone 不能符合 immutalbe object的正常行为, 请实现出
deep clone .
65> 使用 inheritance 或 delegation (委托)来定义 immutable classes.
三个可以用来定义 immutable classes 的技术:
A> immutalbe interface;
B> common interface or base class;
C> immutable delegation class;