在Java语言中,组合和继承是复用类的两个途径。
1、组合
组合是"has-a"关系,将A类的引用置于B类中即可。比如,在使用Spring中用到的反转依赖的那些类都使用了组合。
使用组合为的是,复用一些已有类的功能。
2、继承
继承是Java中的一个重要的概念,但是也会被滥用,从而增加了代码的复杂度。所以,要慎用继承。
继承是"is-a"关系,也就是说,当一组对象具有共同的核心价值,是通过对它们进行"抽象"来解决某个问题。
使用继承为的是,复用一些接口,一些形式。
3、组合与继承之间的选择
(1)一个较好的判断方法是:思考是否需要从新类向基类向上转型,如果向上转型是必须的,则继承是必要的,否则,尽量避免使用继承。
(2)联想起,在设计模式中有Strategy模式和Template Method模式。后者是采用继承来实现的,前者采用了组合。一般而言,可以用Strategy模式来替换Template Method模式。替换的好处是,不用继承,则,相关类可以独立于基类,方便了日后的代码复用。不好之处在于,前一模式增加了代码量及运行的开销。
4、final
对于数据,表示数据初始化后不能再被修改;
对于方法,表示从设计的角度考虑,该方法不能被继承,不能被重载;
对于类,表示从设计的角度考虑,该类不能被继承;
对于参数,表示该参数的引用不能被更改,但若引用的是一个对象,则对象的数值是可以被更改的;
但对于final方法和final类的使用也要特别谨慎,因为很难预见类是如何被复用的。