Java抽象类和接口

181 阅读2分钟

什么是抽象?抽象就是没有具体的实现,在java中有两种方式可以体现面向对象的抽象,一种是抽象类,一种是接口。下面讲一下抽象类和接口的区别。

抽象类

在了解抽象类之前先了解下抽象方法:抽象方法就是只有方法声明,没有方法体:

abstract void fun();//用关键字abstract修饰

抽象方法必须存在于抽象类中,非抽象类中不能有抽象方法。抽象方法必须在其子类中实现这个方法,除非其子类也为抽象类。

抽象类是基于继承的,使得基类更加基本。抽象类被abstract修饰,如果一个类中包含抽象方法,那么它一定是抽象类,但抽象类中除了抽象方法也可以有普通方法。抽象方法不能被private修饰,因为它是抽象的,需要被实现,默认情况下为public。抽象的子类要么全部实现抽象方法,要么就也定义为抽象类。

接口

接口是一种规范,接口是基于实现的(implements)某些类实现这个接口表示这些类具有相同的特征,我们可以认为接口是更加抽象的类。 接口中不能有构造方法,接口中只有抽象方法和静态常量。接口不能被实例化。

为了看起来更加直观,用一个表格再看一下二者的区别:

参数抽象类接口
定义关键字abstractinterface
继承或实现的关键字extendsimplements
子类扩展数量单继承多实现
属性访问控制符都可以只能是public
方法控制符除了对抽象方法有限制:不能用private,其他方法没限制只能是public
其他普通方法有,且必须有实现JDK8之后有了static和default方法,且必须有实现