“失恋了,唉,还没开始就结束了……唉……继续看java”
今天又是周末,我们来看看java的复用机制是什么情况。大家知道,代码复用非常实用,这项特性是java的一个重要的部分。那java用什么来实现的复用呢?是组合和继承。当然还有代理机制,但是不是很常用,因此我们暂时不考虑。
什么是“组合”呢?就是把不同的类的实例放到一个新的类里面,组合起来。那“继承”,就是通过extends关键字进行的继承。组合更强调的是使用某种类的功能,而继承则是对某种类的定制化。因此相对于继承,我们在进行设计的时候,尽量使用组合。因为组合更加灵活,只有在不得不继承的时候再继承。
(小tips:在每个类中都可以加main方法,这样比较方便单元调试。因此一个文件中有多个类可以有多个main)
对于继承,一般将基类的数据定义为private,将方法定义为public。关于基类和本身对象的初始化这就不讨论了。同时,我们知道java的GC不可控,因此像以前说的,如果我们有定义其他的内存申请方式,那么我们需要自己去做特殊的清理工作。我们可以用finalize,但是不建议用这个,原因以前说过。我们可以用try/finally来实现,因为finally一定会执行,可以在其中调用清理工作的方法,按照对象的申请顺序逆序进行清理。(小tips:若想覆盖一个基类方法,而不是重载,为了确保是覆盖,可在方法前加@override)
这里还有一个以前没有见到的定义“向上转型”。什么是向上转型,就是在调用基类的方法的地方可以用子类。因为子类就是基类的一种。
最后说说final吧。我们在使用final的时候,主要用在三个方面,数据、方法、类。在对数据用final的时候,如果是对基本数据类型用final,那么那个数据就不会变。如果是对对象用final,那那个引用指向的对象不能变,但是对象本身是可以变的,这点需要注意。对方法用 final,意思是不允许覆盖。以前说对方法用覆盖,有内联机制,可以提高效率,但是现在这不是重点了,主要还是用禁止覆盖为目的。对类用final,那就是说这个类不能被继承,所有的都为final。