本帖最后由 小冰块 于 2013-6-10 17:46 编辑
如果说接口和抽象类比较相似还可以理解,但是接口和继承直接就差得远了吧。
对于抽象类的继承你说的的确有一定的道理,但是对于普遍继承而言就不是这么回事了。
继承机制中父类和子类是有着is a的逻辑关系的,父类的非私有属性和方法会悉数授予子类。子类可以重写父类方法以便完成自己的特有功能。
但是接口并不是这样,接口中的抽象方法只是一个通用的标准,就像你主机里的PCI插槽,插槽无论何时都会存在,但你不一定要实现它,更不必说全部都要实现,只要找你需要用到得实现就可以了。
下面说说抽象类和接口的关系:
一个类可以(继承)实现多个接口,但只能继承一个类。接口中只能定义方法名,方法参数和返回值,以及静态变量。而抽象类中可以有方法的实现,也可以定义非静态的类变量。所以,当你需要多继承特性时,那你只能使用接口;当你需要在父类中实现部分代码(通用功能)而根据不同情况某一方法有不同的实现时,那就设计为抽象类。
抽象类主要用于关系密切的对象,而接口最适合为不相关的类提供通用功能。
一个基本原则是,首先考虑使用接口。接口可以继承接口。抽象类可以实现(implements)接口,抽象类是可以继承实体类,但前提是实体类必须有明确的构造函数。有个通用的设计思想,如果要设计小而简练的功能块,则使用接口。如果要设计大的功能单元,则使用抽象类。 |