Java抽象類和接口的區別

抽象類和接口都用於實現抽象,可以聲明抽象方法。 抽象類和接口都不能被實例化。但是在下面給出的抽象類和接口之間有許多區別。

抽象類

接口

抽象類可以有抽象和非抽象方法。

接口只能有抽象方法。 從Java 8開始,它也可以有默認和靜態方法。

抽象類不支持多重繼承。

接口支持多繼承。

抽象類可以有final非final,靜態和非靜態變量。

接口只有靜態和final變量。

抽象類可以提供接口的實現。

接口不能提供抽象類的實現。

abstract關鍵字用來聲明抽象類。

interface關鍵字用於聲明接口。

簡單地說,抽象類實現了部分抽象(0到100%),而接口實現了完全抽象(100%)。

Java抽象類和接口的示例

讓我們來看看下面一個簡單的例子,使用接口和抽象類。

//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();
    }
}

執行上面的示例代碼,得到以下結果 -

I am a
I am b
I am c
I am d