接口与抽象类的异同,及怎样选择
接口与抽象类的异同:
1、继承:接口支持多继承;抽象类不能实现多继承。
2、表达的概念:接口用于规范,抽象类用于共性。抽象类是一类事物的高度聚合,那么对于继承抽象类的子类来说,对于抽象类来说,属于"是"的关系;而接口是定义行为规范,因此对于实现接口的子类来说,相对于接口来说,是"行为需要按照接口来完成"。
3、方法实现:对抽象类中的方法,即可以给出实现部分,也可以不给出;而接口的方法(抽象规则)都不能给出实现部分,接口中方法不能加修饰符。
4、子类重写:继承类对于两者所涉及方法的实现是不同的。继承类对于抽象类所定义的抽象方法,可以不用重写,也就是说,可以延用抽象类的方法;而对于接口类所定义的方法或者属性来说,在继承类中必须重写,给出相应的方法和属性实现。
5、新增方法的影响:在抽象类中,新增一个方法的话,继承类中可以不用作任何处理;而对于接口来说,则需要修改继承类,提供新定义的方法。
6、接口可以作用于值类型(枚举可以实现接口)和引用类型;抽象类只能作用于引用类型。
7、接口不能包含字段和已实现的方法,接口只包含方法、属性、索引器、事件的签名;抽象类可以定义字段、属性、包含有实现的方法。
8、接口可以用于支持回调(CallBack);抽象类不能实现回调,因为继承不支持。
如何选择:
1、看是否需要多继承,如果需要就只能使用接口
2、看你在累里定义的方法是否需要有实现的代码,如果要,就使用抽象类
3、使不同的类型有共同的特性的时候使用接口,因为它支持多继承,只想从一个类型继承出不同的行为的子类的时候使用抽象类,可以在基类里有代码实现。
从实现接口和现实抽象类的方法来看,接口是死的,抽象类是活的,当然实现接口的类是活的。
浙公网安备 33010602011771号