接口类和抽象类作用
- 在面向对象编程中,抽象类和接口类是两个经常被用到的语法概念,是面向对象四大特性【封装,抽象,继承,多态】,以及很多设计思想、设计原则、设计模式、编程实现的基础。
- 使用接口类来实现面向对象的抽象特性、多态特性
- 使用接口类践行基于接口而非实现的设计原则
- 使用抽象类来实现面向对象的继承特性
- 使用抽象类实现模板设计模式等等
- 并不是所有的预言都支持这两种语法机制,比如C++只有抽象类的概念,没有接口的概念,python,这两种语法概念都不支持,尽管有些编程语言没有提供现成的语法来支持接口和抽象类,我们仍然可以通过一些手段来模拟实现这两个语法概念。
抽象类定义
- 抽象类只能被用来继承,不能用来创建对象
- 类中可以包含属性和方法,可以有多个方法,但至少有一个方法,只是定义,没有实现,没有实现的方法,我们称之为抽象方法
- 子类继承抽象类,必须要实现抽象类中所有的抽象方法
接口类定义
- 接口类也是只能被用来继承,不能用来创建对象
- 接口类中只能包含方法,不能包含属性
- 接口类中的所有方法,都只能是抽象方法,也就是只有定义,没有实现
- 某一个类实现了某一个接口类,必须实现接口类中所有的抽象方法
如何决定该用抽象类还是接口?
在代码设计、编程开发的时候,什么时候该用抽象类?什么时候该用接口?实际上,判断的标准很简单。如果我们要表示一种 is-a 的关系,并且是为了解决代码复用的问题,我们就用抽象类;如果我们要表示一种 has-a 关系,并且是为了解决抽象而非代码复用的问题,那我们就可以使用接口。从类的继承层次上来看,抽象类是一种自下而上的设计思路,先有子类的代码重复,然后再抽象成上层的父类(也就是抽象类)。而接口正好相反,它是一种自上而下的设计思路。我们在编程的时候,一般都是先设计接口,再去考虑具体的实现
抽象类和接口存在的意义
抽象类是对成员变量和方法的抽象,是一种 is-a 关系,是为了解决代码复用问题。接口仅仅是对方法的抽象,是一种 has-a 关系,表示具有某一组行为特性,是为了解决解耦问题,隔离接口和具体的实现,提高代码的扩展性。