抽象类和接口的异同

一、相同点

  抽象类与接口都可以约束类的行为,是一些方法特征的集合,但是没有方法的实现。从这个角度来讲,接口可以看作一种特殊的“抽象类”。

二、不同点  

  1、抽象类和接口采用完全不同的语法来表示,两者的设计理念也是不同的。

  2、一个父类只能有一个直接父类,但可以通过implements实现多个接口。  

  3、抽象类利于代码复用,接口利于代码的扩展和维护。

  4、对于继承抽象类的子类来说,符合is a 的关系,而对于实现接口的子类来说,符合has a 的关系。接口代表一种能力。

  5、接口是公开的,里面不能有私有的方法或变量,抽象类可以有私有的方法和私有的变量。

  6、实现接口,一定要实现接口里所有的方法,实现抽象类,可以选择性的重写需要用到的方法。

三、接口相对于抽象类的优势

  1、接口不光可以作用于引用类型,也可以作用于值类型。而抽象类来说,只能作用于引用类型。

    2、一个父类只能有一个直接父类,但可以通过implements实现多个接口。

    3、通过接口,可以减少类型暴露的属性和方法,从而便于保护类型对象。当一个实现接口的类型,可能包含其他方法或者属性,但是方法返回的时候,可以返回接口对象,这样调用端,只能通过接口提供的方法或者属性,访问对象的相关元素,这样可以有效保护对象的其他元素。

四、接口的劣势

    就是接口所定义的方法和属性只能相对于继承它的类型(除非在继承类中修改接口定义的函数标示),那么对于多层继承关系的时候,光用接口就很难实现。因为如果让每个类型都去继承接口而进行实现的话,首先不说编写代码比较繁琐,有时候执行的结果还是错误,尤其当子类型对象隐式转换成基类对象进行访问的时候。

posted @ 2017-04-22 22:39  AlexanderTheGreat  阅读(229)  评论(0编辑  收藏  举报