初探设计:Java继承什么时候用?怎么用?

Writer      :BYSocket(泥沙砖瓦浆木匠) git

1、回顾继承

常见的以下: github

一、依赖(”uses-a“) socket

二、聚合(”has-a“) ide

三、继承(”is-a“)类之间关系 post

也就是UML类图中常见的三种关系,另外常见的还有实现(接口与实现类的关系),组合等。 spa


继承,即“is-a”关系,是一种表示特殊与通常的关系。好比,女人(特殊)是一我的(通常)。关键字extends代表正在构造的新类派生于一个存在的类。 设计

一、已经存在的类称为 超类父类或者基类 对象

二、新类被称为 子类或者派生类 继承


有时候看着人家源码的设计。好比常见的接口,紧接着抽象类实现接口,而后继承该抽象类的各类实现: 接口

image

通常都是这样的,行为总则都写着顶层接口抽象类实现了下面各个实现类公用的方法和字段实现类各自实现功能

但里面这些究竟怎么用呢?好比继承在什么前提下使用,什么场景前提下,下面就是思考后的小结:(Think , Write & Do)

2、继承什么时候用?怎么用

也就是说,继承设计使用的时候,有哪些技巧,有哪些须要注意的地方。

一、公共的方法和字段才放在基类(也就是父类)

这句话可能有争议,太过于吹毛求兹或者是严格。拿女人和人的问题来讲,好比名字字段、age均可以放在基类人上面,但女人的那些第二特征就是独有了。

但有些时候的例子老是很疑惑:好比Java工程师实习生和Java工程师,看样子能够“实习生”extends “Java工程师”,而后不少Java工程师上的字段都是不属于Java实习生的。顾二者并无上面太大关系,可能都是从属于一个父类—工程师。下面类关 系图才是正确的:

image

子类对父类的继承是包括了父类的公有和受保护的方法和字段。但子类只须要继承父类的一部分,就没辙了。这时候记住一句话:“多用组合,少用继承”。

二、protect并不能保护父类

其实protect机制在父类并不能起到好的保护。子类能够在须要的的时候访问父类。可是继承无限制,即子类的子类… 无止境的。若是想侵入父类protect方法,只须要写个类,继承任意子类就可访问。两者,同一个包下能访问。

从上面也能够总结出:

三、在继承父类的方法与字段都有意义的时候,选择继承。不然,不要使用继承。

四、在覆盖子类中的方法时,不要偏离最初的设计方法。

父类的方法实现或者定义都是指定了一种行为的内涵。因此继承父类的时候,有个重写override)方法能够改变子类的行为。但请不要改变其定义的内涵。源码中常见的有:好比 IO 中的 read write方法和Servlet中 的 get post。

五、继承与组合、多态

继承,子类与父类在编译期就能肯定其对象。而组合或者是多态,在运行期就才能肯定其对象,相比之下,组合多态达到了更多的灵活性。但,运行期未知的错误是要注意处理的。

顾,“多用组合,少用继承”。

3、本文小结

继承的一点一滴。泥瓦匠,这软文小结,不免有错误。欢迎指正讨论。

欢迎点击个人博客及GitHub — 博客提供RSS订阅哦!

———- http://www.bysocket.com/ ————- https://github.com/JeffLi1993 ———-

微         博:BYSocket  豆         瓣:BYSocket  FaceBook:BYSocket  Twitter    :BYSocket

7066956_21002167761444703497_thumb

相关文章
相关标签/搜索