|
最初由 super_zzw 发布
[B]
面向对象的系统由对象以及对象之间的相互关系构成,接口和抽象类在具体的应用中体现为具体的对象的抽象层次。 抽象类是实现级抽象, 接口是概念级抽象。 接口的确可以看作模块的对外界面,但实际上这个界面在面向对象中就是具体对象的概念级抽象(可能这个具体对象就是你的那个具体模块),它说明了你这个模块所描述的对象概念上是什么、能做什么,调用者遵循这个规范就能调用相应的功能,那么如果这个模块就是排序相关的模块呢。 能说接口和你的这个模块的功能无关?也许你觉得排序就是简单的一段算法实现程序就令当别论。如果用过SortedMap或者SortedSet就应该知道java.util.Comparator接口,它实际就是我所举的例子,这里的SortedMap/SortedSet其实就是你说的界面,Comparator则是排序扩展性的体现。如果某个API模块使用了SortedMap/SortedSet接口对外提供可排序数据集合扩展性,那么它们就成为了可扩展性接口。无论接口是为了对外提供界面也好,提供可扩展性也好, 它们归根到底都是对象的概念级抽象。
当然,抽象类在很多模式中都是提供可扩展性的要点,但是不是所有场合都一样,具体的应用要具体对待。 [/B]
这个问题要站到概念的高度上才能想清楚.
利用INTERFACE的程序之间没有依存关系, A和B都实装了接口I, 但是A和B之间不会有任何关系, 它们可以是完全不同的处理.
利用ABSTRACT的程序, 则可能通过父类发生关系. A和B都继承了C, 则A和B有一部分处理和属性是一致的.
虽然一些功能即可以用INTERFACE也可以用ABSTRACT实现, 但是在概念上二者是完全不同的. |
|