抽象类和接口都包含可以有子类继承实现的成员,但抽象类是对根源的抽象,而接口是对动作的抽象
。
抽象类的功能要远超过接口,那为什么还要接口呢?
这主要是由于定义抽象类的代价高。因为每个类智能继承一个类,在这个类中,必须继承或编写出其中子类的所有共性,因此,虽然接口在功能上会弱化许多,但他只是针对一个动作的描述,而且可以在一个类中同时实现多个接口,这样会降低设计的难度。
抽象类与接口的区别主要有以下几点:
- 子类只能继承一个抽象类,但可以实现任意多个接口;
- 一个类要实现一个借口必须实现接口中的所有方法,而抽象类则不必。
- 抽象类中的成员变量可以是各种类型,而接口中的成员变量只能是 public static void 型的。
- 接口中只能定义抽象方法,而抽象类中可以定义非抽象方法。
- 抽象类中可以有静态方法和静态代码块等,接口中不可以。
- 接口不能被实例化,没有构造方法,但抽象类可以有构造方法。
注:抽象类中,构造方法不能被定义成抽象方法
综上所述可以得下表
比较项 | 抽象类 | 接口 |
---|---|---|
方法 | 可以有非抽象方法 | 所有方法都是抽象方法 |
属性 | 属性中可以有非静态常量 | 所有属性都是静态常量 |
构造方法 | 有构造方法 | 无构造方法 |
继承 | 一个类只能继承一个父类 | 一个类可以同时实现多个接口 |
被继承 | 一个类只能继承一个父类 | 一个接口可以同时继承多个接口 |