技术开发 频道

再读Think in Java-高级篇



    2,把合成和继承结合起来:
    课堂(派生类)
    黑板(基类)--投影仪(派生类)(合成课堂)
    板凳(基类)--高级板凳(派生类)--皮椅(派生类) (合成课堂)
    普通教室(基类)--多媒体教室(派生类) (合成课堂)
    上课人(基类)
    你可以试着把课堂类通过继承(上课人基类),合成(投影仪,皮椅,多媒体教室类)生成。注意虽然编译器能强制基类初始化,但是不会检查成员是不是进行了初始化.
    当你对一个方法在基类里重载了n次,并且在派生类里对其中某个进行了重写,但是不会把基类里的任何一个方法给遮盖的。

    3,用合成还是继承
    一般来说,合成用于新类要使用旧类的功能,而不是其接口的场合,也就是说,把对象嵌进去,用它来实现新类的功能,而嵌进去的这个对象一般也是private的对象。继承则是对已有类进行改造,来获得一个特殊的类。总之,一句话,合成要表达的是一种‘有’的关系,继承表达的是一种‘是’的关系。说到这里,我们就知道protected关键词的意义了,在继承里,如果你想某些东西(数据成员,方法)不被外界知道,而又想对它的继承类开放,用protected就可以做到。

    4,上传
    继承最重要的特征不在于它为新类提供了现成的方法,而是它表达新类和旧类的关系把派生类传给基类,就是沿继承图向上送,因此被称为上传(upcasting)。上传总是安全的,因为你是把一个具体的类型转化成了一般的类型。下面就通过一个例子来说明:
class Person{ public void sleep(){}; static void getSleep( Person p){ p.sleep(); } } public class Student extends Person{ public static void main(String[] args){ Students st = new Students(); Person.getSleep(st); } }
0
相关文章