复用类:通过创建新类来复用代码,使新类具有更多的功能,不必从头开始编写。
1、 组合
在新类中产生现有类的对象,这种方法只是复用了现有程序代码的功能,而不是它的形式。
2、 继承
按照现有类来创建新类,采用现有类的形式并在其中添加新代码。
(1) 继承不只是复制父类的接口,当创建一个子类对象时,该对象包含了一个父类的子对象,这个子对象与用父类直接创建的对象是一样的。二者的区别在于前者父类的子对象被包装在父类的内部,而后者来自于外部。
(2) Java会自动在导出类的构造器中插入对基类构造器的调用。
(3) 如果基类没有默认的构造器或者想调用一个带参数的构造器来对基类进行初始化,则在导出类中必须使用super显示调用基类的构造器。
3、两者之间的异同点
相同点:组合和继承都允许在新的类中放置子对象,组合是显示地这样做,而继承则是隐式地这样做。
区别:组合一般是将现有类型作为新类型底层实现的一部分来加以复用,而继承复用的是接口。
在”is-like-a”(像是一个)关系中用继承表达,而”has-a”(有一个)的关系用组合表达。
总结:到底使用组合还是继承,一个判断方法是自己是否需要从新类向基类进行向上转型。