一、简介
本文总结最常见的面试题之一:接口和抽象类的区别。
二、区别
如下表所示:
区别 | Interface接口 | Abstract class(含有抽象方法的类成为抽象类) |
声明方式 | interface | abstract |
使用方式 | implements | extends |
修饰符 | 接口方法默认修饰符是public。你不可以使用其它修饰符。 | 抽象方法可以有public、protected和default这些修饰符 |
main方法 | 接口没有main方法,因此我们不能运行它。(java8以后接口可以有default和static方法,所以可以运行main方法) | 抽象方法可以有main方法并且我们可以运行它 |
特性 | 1. 接口中的所有变量都是public static final 2. 接口中的所有方法都是抽象方法 3. 可以同时实现多个接口 | 1. 抽象类可以有抽象方法,也可以没有。可以有普通方法,也可以没有 2. 普通类继承抽象类,必须实现其中的抽象方法,如果不实现,那么必须也是抽象类 3. 一个普通类只能继承一种抽象类 4. 一个抽象类实现了一个接口,可以不实现其抽象方法 |
实例化 | 不能实例化 | 不能实例化 |
构造函数 | 接口没有构造方法 | 抽象类可以用构造方法 |
成员变量和方法 | 必须是静态常量和抽象方法,不能含有静态代码块以及静态方法 | 可以有成员变量和成员方法,可以有静态代码块和静态方法 |
说明 | 接口是特征,是对一种行为的抽象,比如,鸟类拥有的特征是飞。 | 抽象类是内容,是对一种事物的抽象,比如,鸟类是所有鸟的抽象。 |
使用示例 | public interface IStudent {
public static final String NAME = "ABC";
public abstract void test();
default void test1(){ }
static void test2() {
}
| public abstract class AbsClass { private int a;
public AbsClass(int a) { this.a = a; }
public AbsClass() { }
public void test() {
}
public abstract void test2(); } |