java之所以能有如此广泛的应用除了java自身的平台无关性(移植性),还有java具有强大的类库和第三方开源框架等使得java开发变得简单,也就是对类的复用。而在java中一般使用组合、继承、和代理来完成类的复用。
1、组合:
在新类中创建复用类的对象,这种复用方式只复用了现有类的功能而非现有类的形式(继承即复用了现有类的形式)
复用了类的底层实现
2、继承:
复用现有类的形式可以在现有类的基础上添加新的特性(代码)继承也是面向对象设计的三大基石之一(封装、继承、多态)
复用了类的接口
继承的语法:如果创建一个类除非指明继承一个现有类,该类会默认继承Object类。使用extends 该类会得到基类的所有域和方法(但是private声明的会被屏蔽掉)。
初始化基类和导出类:总是基类最先被初始化然后才是导出类,也就是初始化关系是从内(基类)向外(导出类)扩散。
如果想要带参数初始化基类可以使用super关键字super(变量参数......)
3、代理:
代理作为组合和继承的中间点,将复用类的对象赋予新类的构造类中。
4、在继承和组合中间选择
组合:
优点
(1)首先考虑使用组合,组合只复用了现有类的形式所以更加灵活,具有更好的扩展性。
(2)新类和现有类彼此相互独立,不会破坏新类的封装性
(3)支持动态组合,运行时选择不同类型的局部对象
缺点
(1)不能像基础一样直接获取现有类的接口
(2)创建新类对象必须创建现有类的对象
继承:
优点
(1)自动获取现有类的所有方法和属性
(2)创建子类对象时不需创建基类对象(基类对象自动创建包含于子类中)
缺点
(1)子类和父类耦合过紧,子类依赖于父类实现,父类改变子类受其影响大。子类缺乏独立性
(2)支持扩展但是会加大设计的复杂性
(3)无法动态继承
下图来自于网络资料