Java的抽象类
1.抽象类的定义
(1)抽象类仅提供一个类型的部分实现。不能被实例化。
(2)抽象类和子类的关系----是模板方法模式的一种应用
2.抽象类的用途
(1) 用于继承,尽量不要继承具体类。尽量不要继承具体类。尽量不要继承具体类。
(2)如果我们把一个模块看成一个树,那么树的树干树枝是抽象类(也可以是接口),而叶子是具体类(叶子是真正干活的)
3.抽象类的使用建议
(1)抽象类应当拥有尽可能多的共同代码
(2)抽象类应当用于尽量少的数据(状态)
(3)子类不应该置换掉(override)或者注销掉(nullify)父类的责任,而应该扩展超类的责任(可以使用接口等扩展)---可以用一个谚语:种瓜得瓜,种豆得豆来形容,瓜种是超类,瓜是子类。如果豆是子类就不符合了。
如果一个子类过多的置换或者过多的注销掉超类的责任,那么就要考虑是不是这个子类不是这个超类的一个特例。
比如:如果把狗设计成猫的子类,那么狗不会爬树,就需要注销猫的爬树功能。所以我们可以设计一个动物类,猫实现了动物类外,再扩展一个爬树接口
(4) 不要继承工具类。只有当分类学有意义时,才使用继承。一个商业类型不会与一个工具类型有这种分类学上有意义的关系。
应该和工具类是关联关系。