logo

抽象クラスとインターフェースの違い

抽象クラスと抽象インターフェイスは両方とも、抽象メソッドを宣言できる抽象化を実現するために使用されます。抽象クラスとインターフェイスの両方をインスタンス化することはできません。

手動テスト

ただし、抽象クラスとインターフェイスの間には、以下に示す多くの違いがあります。

抽象クラスインターフェース
1) 抽象クラスは次のことができます。 抽象的なものと非抽象的なものがある 方法。インターフェイスに含めることができるのは、 抽象的なだけ 方法。 Java 8 以降では、 デフォルトメソッドと静的メソッド また。
2) 抽象クラス 多重継承をサポートしていませんインターフェース 多重継承をサポート
3) 抽象クラス 最終変数、非最終変数、静的変数、および非静的変数を持つことができますインターフェイスには 静的変数と最終変数のみ
4) 抽象クラス インターフェースの実装を提供できるインターフェース 抽象クラスの実装を提供できません
5) 抽象的なキーワード 抽象クラスを宣言するために使用されます。インターフェースキーワード インターフェイスを宣言するために使用されます。
6) アン 抽象クラス 別の Java クラスを拡張して、複数の Java インターフェイスを実装できます。アン インターフェース 別の Java インターフェイスのみを拡張できます。
7) アン 抽象クラス キーワード「extends」を使用して拡張できます。アン インターフェース キーワード「implements」を使用して実装できます。
8) Javaへ 抽象クラス private、protected などのクラス メンバーを持つことができます。Java インターフェースのメンバーはデフォルトでパブリックです。
9) 例:
パブリック抽象クラス Shape{
パブリック抽象 void 描画();
}
例:
パブリック インターフェイス Drawable{
ボイド描画();
}

簡単に言うと、抽象クラスは部分的な抽象化 (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