抽象類和接口都用于實現(xiàn)抽象,可以聲明抽象方法。 抽象類和接口都不能被實例化。但是在下面給出的抽象類和接口之間有許多區(qū)別。
抽象類 | 接口 |
---|---|
抽象類可以有抽象和非抽象方法。 | 接口只能有抽象方法。 從Java 8開始,它也可以有默認(rèn)和靜態(tài)方法。 |
抽象類不支持多重繼承。 | 接口支持多繼承。 |
抽象類可以有final ,非final ,靜態(tài)和非靜態(tài)變量。 |
接口只有靜態(tài)和final 變量。 |
抽象類可以提供接口的實現(xiàn)。 | 接口不能提供抽象類的實現(xiàn)。 |
abstract 關(guān)鍵字用來聲明抽象類。 |
interface 關(guān)鍵字用于聲明接口。 |
簡單地說,抽象類實現(xiàn)了部分抽象(0到100%),而接口實現(xiàn)了完全抽象(100%)。
讓我們來看看下面一個簡單的例子,使用接口和抽象類。
//Creating interface that has 4 methods
interface A {
void a();// bydefault, public and abstract
void b();
void c();
void d();
}
// Creating abstract class that provides the implementation of one method of A
// interface
abstract class B implements A {
public void c() {
System.out.println("I am C");
}
}
// Creating subclass of abstract class, now we need to provide the
// implementation of rest of the methods
class M extends B {
public void a() {
System.out.println("I am a");
}
public void b() {
System.out.println("I am b");
}
public void d() {
System.out.println("I am d");
}
}
// Creating a test class that calls the methods of A interface
class Test5 {
public static void main(String args[]) {
A a = new M();
a.a();
a.b();
a.c();
a.d();
}
}
執(zhí)行上面的示例代碼,得到以下結(jié)果 -
I am a
I am b
I am c
I am d