一、简介
本文总结最常见的面试题之一:接口和抽象类的区别。
二、区别
如下表所示:
区别 |
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(); } |