java interface abstract class tutorial with examples
このビデオチュートリアルでは、Javaインターフェイスとは何か、その実装方法、およびJavaのインターフェイスを使用した多重継承について例を挙げて説明します。
以前のチュートリアルの1つで、抽象化について詳しく説明しました。そこで、抽象クラスと抽象メソッドについて説明しました。抽象クラスには非抽象メソッドを含めることもできるため、抽象クラスが抽象化を提供することはわかっています。
Javaで100%の抽象化を提供する機能は、「 インターフェース 」。このチュートリアルでは、 Javaのインターフェース。
学習内容:
インターフェイスと抽象クラスに関するビデオチュートリアル
Javaのインターフェースと抽象クラスの紹介–パート1:
Javaのインターフェースと抽象クラスの概要–パート2:
Javaでの抽象化と継承:
Javaのインターフェースとは
Javaのインターフェースは、クラスの動作を指定する抽象型として定義されています。 インターフェイスは、特定のクラスの動作に関するルールを設定する一種のプロトコルです。
Javaのインターフェースには、抽象メソッドと静的定数を含めることができます。デフォルトでは、インターフェイスのすべてのメソッドはパブリックで抽象的です。
Javaのインターフェースの簡単な例を以下に示します。
interface shape{ public static final String color = “Red”; public void calculateArea(); }上記の例では、静的変数と抽象メソッド「calculateArea()」を持つインターフェース「shape」を定義しています。
インターフェイスは、本体として抽象メソッドのみを持つエンティティです。また、静的な最終変数を含めることもできます。
したがって、クラスと同様に、インターフェイスにもメソッドと変数を含めることができますが、メソッドは抽象的(実装なし)であり、変数は静的であることに注意してください。
以下に、インターフェースに関連して留意すべきいくつかのプロパティを示します。
- インターフェースはクラスの青写真です。彼らはクラスに彼らのメソッドを通して何をすべきかを教えます。
- インターフェイスは抽象メソッドを指定し、そのインターフェイスを実装するクラスはそれらのメソッドも実装する必要があります。
- インターフェイスを実装するクラスがインターフェイスのすべてのメソッドを定義していない場合、そのクラスは抽象クラスになります。
インターフェイス宣言の一般的な構文を以下に示します。
interface { //constant or static fields declaration //abstract method declaration //default declarations }上記の宣言に示されているように、Javaキーワード「interface」を使用します。これは、現在インターフェースを宣言していることを示します。
char番号をintc ++に変換します
「interface」キーワードの後にinterface_nameが続き、その後に中括弧が続きます。次に、抽象メソッドのさまざまな宣言、静的フィールド宣言などがあります。最後に、中括弧を閉じます。
例えば、2つのメソッド(method_oneとmethod_two)を含むインターフェイス「TestInterface」を宣言する場合、TestInterfaceの宣言は次のようになります。
interface TestInterface{ void method_one(); void method_two(); }Javaでのインターフェースの使用
- Javaのインターフェースは、抽象メソッドしか持てないため、100%抽象化されます。
- インターフェイスを使用すると、クラスでは不可能な多重継承をJavaで実現できます。
- 疎結合を実現するために、インターフェースを使用できます。
Javaでインターフェースを実装する方法
インターフェイスが宣言されると、クラスで使用できるようになります 「implements」キーワードを使用する クラス宣言で。
この「implements」キーワードは、次に示すようにクラス名の後に表示されます。
class implements { //class body }インターフェイスの実装は、契約に署名することと同じです。したがって、インターフェイスを実装するクラスは、コントラクトに署名し、インターフェイスの抽象メソッドを実装することに同意したこと、つまり、インターフェイスで指定された動作を実行することを意味します。
インターフェイスを実装するクラスがインターフェイスで指定された正確な動作を実装しない場合、クラスは抽象として宣言する必要があります。
インターフェイスの実装例
以下に示すのは、Javaのインターフェースの簡単な例です。
//interface declaration interface Polygon_Shape { void calculateArea(int length, int breadth); } //implement the interface class Rectangle implements Polygon_Shape { //implement the interface method public void calculateArea(int length, int breadth) { System.out.println('The area of the rectangle is ' + (length * breadth)); } } class Main { public static void main(String() args) { Rectangle rect = new Rectangle(); //declare a class object rect.calculateArea(10, 20); //call the method } }出力:

上記のプログラムは、Javaのインターフェースの簡単な例を示しています。ここでは、Polygon_Shapeという名前のインターフェイスを宣言し、クラスRectangleがそれを実装します。
Javaでのインターフェース命名規則
Javaの命名規則は、読みやすい一貫性のあるコードを生成できるようにするために、プログラマーとして従わなければならない命名ガイドラインです。 Javaは、命名クラスとインターフェースに「TitleCase」表記を使用します。変数、メソッドなどに「CamelCase」表記を使用します。
インターフェイスに関する限り、インターフェイス名はタイトルケースにあり、インターフェイス名のすべての単語の最初の文字が大文字になっています。インターフェイス名は、通常は形容詞になるように選択されます。ただし、インターフェイスがmapやlistなどのクラスのファミリーを表す場合は、名詞にちなんで名前を付けることができます。
有効なインターフェイス名の例を以下に示します。
public interface Iterable {} public interface List {} public interface Serializable {} public interface Clonable {} public interface Runnable {}インターフェイスコンストラクタ
次の質問は、インターフェースにコンストラクターがあるかどうかです。
メソッドを呼び出すにはオブジェクトが必要であることはわかっています。オブジェクトを作成するには、コンストラクターが必要です。ただし、Javaのインターフェイスの場合、メソッドは実装されていません。
インターフェイスのメソッドはすべて抽象的です。したがって、インターフェースからこれらのメソッドを呼び出すことには意味がありません。第二に、インターフェースはデフォルトで抽象的であるため、インターフェースのオブジェクトを作成することはできません。 したがって、Interfaceのコンストラクターは必要ありません。
インターフェイスメソッド
このセクションでは、インターフェイスメソッドを宣言する方法について説明します。原則として、インターフェイスはパブリックメソッドのみを持つことができます。デフォルトでは、インターフェイスメソッドはパブリックです。インターフェイス内で他のアクセス修飾子を使用することは許可されていません。
したがって、明示的に宣言するかどうかに関係なく、インターフェイスのすべてのメソッドはデフォルトで抽象的であり、公開されています。
したがって、void printMethod()がインターフェイスで宣言する予定のプロトタイプである場合、次の宣言は同じです。
void printMethod(); public void printMethod(); abstract void printMethod (); public abstract void printMethod ();インターフェイスメソッドのインターフェイス内で次の修飾子を使用できないことに注意してください。
- 最後の
- 静的
- 民間
- 保護
- 同期
- ネイティブ
- strictfp
それでは、Javaプログラムを実装して、インターフェースメソッドの可視性を示しましょう。
//declare an interface interface TestInterface { void printMethod(); //default visibility is public. } //interface implementation class TestClass implements TestInterface { //if the access modifier is changed to any other, compiler generates error public void printMethod() { System.out.println('TestClass::printMethod()'); } } class Main { public static void main(String() args) { TestClass tc = new TestClass(); //create an object tc.printMethod(); //call concrete method } } 出力:

すでに述べたように、デフォルトでは、インターフェースメソッドはパブリックです。したがって、interfaceメソッドにアクセス修飾子を指定しない場合、上記のプログラムのようにパブリックになります。
上記のプログラムのインターフェイスメソッド宣言を次のように変更するとします。
private void printMethod();
これは、インターフェイスメソッドprintMethod()をprivateとして指定したことを意味します。プログラムをコンパイルすると、次のコンパイラエラーが発生します。
エラー:ここでは修飾子privateは許可されていません
private void printMethod();
テストできる2番目のケースは、クラスTestClassに実装されているメソッドの修飾子をpublicからprivateに変更することです。これで、クラスのデフォルトの修飾子はプライベートになります。したがって、次のように、クラスのメソッドプロトタイプからpublicキーワードを削除するだけです。
void printMethod() { System.out.println('TestClass::printMethod()'); }プログラムをコンパイルすると、次のエラーが発生します。
エラー:TestClassのprintMethod()はTestInterfaceにprintMethod()を実装できません
void printMethod()
^
より弱いアクセス権限を割り当てようとしています。公開されました
したがって、ここで注意すべき点は、インターフェイスの実装されたメソッドのアクセス修飾子を他のアクセス修飾子に変更できないことです。インターフェイスメソッドはデフォルトでパブリックであるため、インターフェイスを実装するクラスによって実装される場合、これらのメソッドもパブリックである必要があります。
Javaのインターフェースフィールド
インターフェイスで宣言されたフィールドまたは変数は、デフォルトでpublic、static、およびfinalです。これは、一度宣言すると、それらの値を変更できないことを意味します。
これらの修飾子を指定せずにインターフェースフィールドが定義されている場合、Javaコンパイラーはこれらの修飾子を想定することに注意してください。 例えば、 インターフェイスでフィールドを宣言するときにパブリック修飾子を指定しない場合、デフォルトでそれが想定されます。
インターフェイスがクラスによって実装されると、インターフェイスのすべての抽象メソッドの実装が提供されます。同様に、インターフェイスで宣言されたすべてのフィールドも、インターフェイスを実装するクラスに継承されます。したがって、インターフェイスフィールドのコピーが実装クラスに存在します。
これで、インターフェイスのすべてのフィールドがデフォルトで静的になります。したがって、オブジェクトではなくクラス名を使用してクラスの静的フィールドにアクセスするのと同じように、インターフェイス名を直接使用してそれらにアクセスできます。
以下のJavaプログラムの例は、インターフェースフィールドにアクセスする方法を示しています。
//interface declaration interface TestInterface{ public static int value = 100; //interface field public void display(); } //Interface implementation class TestClass implements TestInterface{ public static int value = 5000; //class fields public void display() { System.out.println('TestClass::display () method'); } public void show() { System.out.println('TestClass::show () method'); } } public class Main{ public static void main(String args()) { TestClass testObj = new TestClass(); //print interface and class field values. System.out.println('Value of the interface variable (value): '+TestInterface.value); System.out.println('Value of the class variable (value): '+testObj.value); } }出力:

上記のプログラムに示されているように、インターフェイスフィールドには、インターフェイス名、ドット演算子(。)、実際の変数またはフィールド名を使用してアクセスできます。
Javaのジェネリックインターフェイス
以前のチュートリアルでJavaジェネリックについて説明しました。ジェネリッククラスやメソッドなどのほかに、ジェネリックインターフェイスも使用できます。ジェネリックインターフェイスは、ジェネリッククラスを指定する方法と同様に指定できます。
ジェネリックインターフェイスは、データ型に依存しない型パラメーターで宣言されます。
汎用インターフェースの一般的な構文は次のとおりです。
例を使用したホワイトボックスとブラックボックスのテスト
interface { //interface methods and variables }クラスで上記のジェネリックインターフェイスを使用したい場合は、 以下に示すクラス定義:
class implements interface_name { //class body }クラスでは、インターフェイスと同じparam-listを指定する必要があることに注意してください。
次のJavaプログラムは、Javaのジェネリックインターフェイスを示しています。
//generic interface declaration interface MinInterface>{ T minValue(); } //implementation for generic interface class MinClassImpl> implements MinInterface { T() intArray; MinClassImpl(T() o) { intArray = o; } public T minValue() { T v = intArray(0); for (int i = 1; i intMinValue = new MinClassImpl (intArray); MinClassImpl charMinValue = new MinClassImpl(charArray); //call interface method minValue for int type array System.out.println('Min value in intOfArray: ' + intMinValue.minValue()); //call interface method minValue for char type array System.out.println('Min value in charOfArray: ' + charMinValue.minValue()); } 出力:

上記のプログラムは、配列内の最小値を見つけるためのメソッドを含むインターフェイスを実装しています。これは汎用インターフェースです。クラスはこのインターフェースを実装し、メソッドをオーバーライドします。 mainメソッドでは、interfaceメソッドを呼び出して、整数と文字配列の最小値を見つけます。
Javaの複数のインターフェース
継承のトピックでは、「ダイヤモンド問題」と呼ばれるあいまいさが生じるため、Javaではクラスが複数のクラスから継承できないことを確認しました。
ただし、クラスは複数のインターフェイスを継承または実装できます。この場合、それは多重継承として知られています。したがって、クラスを介してJavaで多重継承を実装することは許可されていませんが、インターフェイスを使用して実装することはできます。
次の図は、インターフェイスを使用した多重継承を示しています。ここで、クラスは2つのインターフェイス(Interface_oneとInterface_two)を実装します。

クラスが複数のインターフェースを実装する場合、インターフェース名はクラス宣言でコンマ区切りされることに注意してください。複雑さを処理できる限り、いくつでもインターフェースを実装できます。
複数のインターフェースを示すJavaプログラムを以下に示します。
//Interface_One declaration interface Interface_One{ void print(); } //Interface_Two declaration interface Interface_Two{ void show(); } //multiple inheritance - DemoClass implementing Interface_One&Interface_Two class DemoClass implements Interface_One,Interface_Two{ public void print(){ //Override Interface_One print() System.out.println('Democlass::Interface_One_Print ()'); } public void show(){ //Override Interface_Two show() System.out.println('DemoClass::Interface_Two_Show ()'); } } public class Main{ public static void main(String args()){ DemoClass obj = new DemoClass(); //create DemoClass object and call methods obj.print(); obj.show(); } } 出力:

youtubeからmp4へのコンバーターオンライン無料ダウンロードなし
上に示したように、2つのインターフェースを実装します。次に、それぞれのメソッドをオーバーライドし、mainメソッドで呼び出します。
Javaでの多重継承は、C ++で多重継承が提供するすべての利点を提供します。ただし、クラスを使用した多重継承とは異なり、インターフェイスを使用した多重継承にはあいまいさがありません。
Javaでのインターフェイスの継承:インターフェイスはインターフェイスを拡張します
クラスがインターフェースを実装する場合、それは「 実装 ’キーワード。 Javaでは、インターフェースは別のインターフェースを継承できます。これは、「 拡張します ’キーワード。インターフェイスが別のインターフェイスを拡張する場合、それは「 インターフェイスの継承 」をJavaで。

インターフェイスの継承を実装するJavaプログラムを以下に示します。
//Interface_One declaration interface Interface_One{ void print(); } //Interface_Two declaration; inherits from Interface_One interface Interface_Two extends Interface_One{ void show(); } //multiple inheritance - DemoClass implementing Interface_Two class DemoClass implements Interface_Two{ public void print(){ //Override Interface_Two print() System.out.println('Democlass public class Main{ public static void main(String args()){ DemoClass obj = new DemoClass(); //create DemoClass object and call methods obj.print(); obj.show(); } } 出力:

インターフェイスの継承を示すために、インターフェイスを使用した多重継承に使用したものと同じプログラムを変更しました。ここでは、Interface_twoでInterface_oneを拡張してから、クラスにInterface_twoを実装します。インターフェイスは継承されるため、両方のメソッドをオーバーライドできます。
よくある質問
Q#1)Javaでのインターフェイスの使用法は何ですか?
回答: Javaのインターフェースは、100%の抽象化を実現するために使用されるエンティティです。これには、インターフェースを実装するクラスによってオーバーライドできる抽象メソッドのみを含めることができます。
ある意味で、インターフェースはクラスの青写真のように機能し、クラスに抽象メソッドのプロトタイプと静的定数を提供し、クラスはインターフェースを実装することによってこれらのメソッドをオーバーライドする必要があります。
Q#2)Javaのインターフェースの利点は何ですか?
回答: インターフェイスの利点のいくつかは次のとおりです。
- インターフェイスは、クラスの青写真として機能します。
- このインターフェースは、すべての抽象メソッドを備えているため、Javaで100%の抽象化を提供します。
- インターフェイスを使用して、Javaで多重継承を実現できます。 Javaは複数のクラスから継承することを許可していませんが、クラスは複数のインターフェースを実装できます。
#3)インターフェイスにメソッドを含めることはできますか?
回答: インターフェイスには、メソッドのプロトタイプと静的定数および最終定数を含めることができます。ただし、Java 8以降、インターフェイスには静的メソッドとデフォルトメソッドを含めることができます。
Q#4)インターフェースをfinalとして宣言できますか?
回答: いいえ。インターフェイスをfinalとして宣言すると、クラスはそれを実装できなくなります。クラスによって実装されていない場合、インターフェイスは目的を果たしません。
インターフェイスの詳細
インターフェイスはクラスのような青写真ですが、メソッド宣言のみが含まれます。実装方法はありません。インターフェイスのすべてのメソッドは、デフォルトでパブリック抽象です。 Java 1.8インターフェースには、静的メソッドとデフォルトメソッドを含めることができます。
インターフェイスは主にAPIで使用されます。
例えば: 車両のエンジンを設計していると考えてください。
ハードウェア部分を使い終わったら、エンジンを使用しているクライアントがソフトウェア機能の一部を実装する必要があります。したがって、その場合は、インターフェースでエンジン機能を定義できます。
Interface Engine { void changeGear(int a); void speedUp(int a); } インターフェイスで従うべきルール
- インターフェイスを実装しているクラスは、インターフェイスのすべてのメソッドを実装する必要があります。
- インターフェイスには最終変数を含めることができます。
public class Vehicle implements Engine { int speed; int gear; @Override public void speedUp(int a) { this.speed=a; System.out.println('speed'+speed); } @Override public void changeGear(int a) { this.gear=a; System.out.println('gear'+gear); } public static void main(String() args) { // TODO Auto-generated method stub Vehicle objv=new Vehicle(); objv.changeGear(3); objv.speedUp(70); } } 
ここで、Vehicleクラスは、エンジンインターフェイスを実装しているサブクラスです。
抽象クラスとは何ですか?
抽象クラスはクラスに似ていますが、抽象メソッドと具象メソッドがあります。抽象メソッドには実装がありません。メソッド宣言のみが含まれます。
抽象クラスで従うべきルール
- 抽象クラスはインスタンス化できません。
- 抽象クラスを拡張する子クラスは、親クラスのすべての抽象メソッドを実装するか、子クラスを抽象クラスとして宣言する必要があります。
部分的な実装を設計したい場合は、抽象クラスを選択できます。
抽象クラスプログラムの例:
EmployeeDetails.java
public abstract class EmployeeDetails { private String name; private int emp_ID; public void commonEmpDetaills() { System.out.println('Name'+name); System.out.println('emp_ID'+emp_ID); } public abstract void confidentialDetails(int s,String p); } 
抽象クラスを拡張しようとしているクラス。
HR.java
public class HR extends EmployeeDetails { private int salary; private String performance; @Override public void confidentialDetails(int s,String p) { this.salary=s; this.performance=p; System.out.println('salary=='+salary); System.out.println('performance=='+performance); } public static void main(String() args) { HR hr =new HR(); hr.confidentialDetails(5000,'good'); } } 
注意すべき重要なポイント:
- Interfacesでは、すべてのメソッドにメソッドが実装されているわけではありません。
- インターフェイスを実装しているクラスは、その特定のインターフェイスのすべてのメソッドを実装する必要があります。
- 抽象クラスには、通常の具象メソッドだけでなく抽象メソッドも含めることができます。抽象メソッドには実装がありません。
- 抽象クラスを拡張しているクラスには、抽象クラス内のすべての抽象メソッドの実装が必要です。
- サブクラスに抽象メソッドを実装するのに十分な情報がない場合は、サブクラスを抽象クラスとして宣言する必要があります。
結論
このチュートリアルでは、Javaのインターフェースの基本的な概念を紹介しました。インターフェイスの必要性とともに、インターフェイスの定義について説明しました。それらの基本的な構文と定義を調べました。次に、「implements」キーワードを使用するインターフェースの使用方法について説明しました。
Javaで複数のインターフェースとインターフェース継承を使用する方法を学びました。複数のインターフェースを使用して、Javaで多重継承を実装できます。インターフェイスの継承とは、あるインターフェイスが別のインターフェイスを拡張することです。
=> すべてのJavaトレーニングシリーズを見るには、ここにアクセスしてください