《Think in java·第 6 章类再生》
读TIJ -1 对象入门 中已经就代码复用性吐槽了。继承关系在结果上(不是为了代码复用而设计继承关系)为代码复用提供了新的途径。
本章看其目录就比较杂,程序员的内聚思想去哪儿了?合成复用优先——合成、继承,为什么实现继承是不好的……
6.1 合成的语法
解释了一个例程,没有什么好说的。has_a关系。
6.2 继承的语法
【You can think of inheritance, then, as reusing the class.】Is_a;
super.xx( )、扩展
6.2.1 初始化基类 【p81一旦新对象被创建,就在Java heap(堆)中给它分配内存空间,以保存它所有的实例变量的值。这里所指的实例变量不仅包括自己声明的所有实例变量,也包括所有祖先类中声明的所有实例变量(父类的private实例变量也在内)】。所以子类对象包含了一个基类的对象作为“子对象”,可以想象,子对象必须被正确初始化就得调用它(即父类的)构造器。
6.3 合成与继承的结合
A1包含B又是A的子类。
6.3.1 确保正确的清除 这人对清除情有独钟啊。finally clause
6.3.2 名字的隐藏 父类的方法m1(int)、m1(String)与子类定义m1(double),简单的overload;既然说道名字的隐藏,就可以谈一下父类的public static m1(int)和子类的public static m1(int)
6.4 到底选择合成还是继承
【需要将成员对象的属性变为public】Never
6.5 protected
太简单
6.6 累积开发
继承的一个好处是它支持增量开发
6.7 上溯造型Upcasting
这一节比较流畅。
【The most important aspect of inheritance is not that it provides methods for the new class. It’s the relationship expressed between the new class and the base class. This relationship
can be summarized by saying, “The new class is a type of the existing class.”】
6.7.1 何谓“上溯造型” 是因为类图中父类在上,【Casting from a derived type to a base type moves up on the inheritance diagram】。在讲依赖的单向性时,我通常把父类放在下面。
再论合成与继承 不错。但是不如直接讲LSP。
6.8 final 关键字
6.8.1 final 数据 “constant”通常需要static final。final 修饰引用变量,仅保证其引用不变。Java does not provide a way to make any arbitrary object a constant.—>不变对象。
3. final 形参 方法体中不能够重新赋值,在一般情况下,【 This feature seems only marginally useful】,但是对于内部类有用。
6.8.2 final 方法 1阻止其他人改写 2效率。
6.8.3 final 类
6.9 初始化和类装载
就这些,
读TIJ -6 类再生