抽象类(学习笔记)

1.  什么是抽象类

抽象类仅提供一个类型的部分实现。抽象类可以有实例变量,以及一个或多个构造函数。抽象类可以同时有抽象方法和具体方法。

一个抽象类不会有实例,这些构造函数不能被客户端调用来创建实例。一个抽象类的构造函数可以被其子类调用,从而使一个抽象类的所有子类都可以有一些共同的实现,而不同的子类可以在此基础上有其自己的实现。

 

2.  抽象类的用途

1)  具体类不是用来继承的。 Scott Meyers曾指出,只要有可能,不要丛具体类继承。

2)  假设有2个具体类,类A和类B,类B是类A 的子类,那么一个最简单的修改方案是应当建立一个抽象类(或java接口)C,然后让类A和类B成为抽象类C的子类。

3)  抽象类应当拥有尽可能多的共同代码。以提高代码的复用率。

4)  抽象类应当拥有尽可能少的数据。

 

3.  基于抽象类的模式和原则

1)  针对抽象编程,不要针对具体编程。

2)  尽量使用合成(Composition),而不要使用继承来达到复用的目的。

3)  使用摸板方法模式

 

4.  什么时候应当使用继承复用

1)  子类是超类的一个特殊种类,而不是超类的一个角色,也就是要区分”is – a” “has-a”两种关系。

2)  永远不会出现需要将子类换成另一个子类的情况。如果设计师不是很肯定一个类回不会在将来变成另一个类的子类的话,就不应当把这个类设计成这个超类的子类。

3)  子类具有扩展超类的责任,而不是具有置换掉(Override)或注销掉(Nullify)超类的责任。

4)  只有在分类学上有意义时,才可以使用继承,不要丛工具类继承。

 

posted on 2004-03-07 01:48  小龙  阅读(140)  评论(0)    收藏  举报

导航