Javaのインターフェースとは何ですか?それを実装する方法は?



この記事は、JavaInterfaceとその機能に関連するさまざまなタイプの例に対する包括的なアプローチを支援します。

' インターフェース は、Javaプログラミング言語で抽象化を実現するための高度なレベルです。 Javaインターフェイスは 複雑さの軽減 コード内で、 読みやすさ 。この記事では、次のドケットを介してJavaインターフェイスについて説明します。

Javaインターフェイスとは何ですか?

コンピュータインターフェース 2つ以上のシステムを分離する境界として知られています。信号、コマンド、またはプロトコルを使用できるシステム内のコンポーネント間でデータを交換します。





java-interface

Java抽象化は、メソッド内に記述された実装ロジックを非表示にすることにより、特定のメソッドの機能を提供します。同様に、Java Interfaceも抽象クラスであり、メソッド宣言は含まれていますが、その定義は含まれていません。クラス 実装 抽象メソッドを継承するためのインターフェース。抽象メソッドとともに、 インターフェース 含めることもできます 定数、静的メソッド、ネストされたインターフェイス そして デフォルトのメソッド。



クラスとインターフェースの類似点。

インターフェイスは、Javaの通常のクラスと完全に似ています。インターフェイスには抽象メソッドが含まれており、これらのメソッドは実装されるように設計されています。このプロセスは、クラスに関しては通常の継承と同じです。類似性について詳しく説明します。

  • クラスと同じように、インターフェイスには必要な数のメソッドを含めることもできます。
  • クラスと同様に、インターフェースも .java 拡張ファイル。
  • 驚いたことに、インターフェイスのバイトコードは 。クラス ファイル。
  • インターフェイスはパッケージの形式で表示され、それぞれのバイトコードはパッケージ名と一致するディレクトリにあります。

なぜインターフェースが必要なのですか?

Javaはサポートしていません 多重継承、 そのため、クラスがインスタンスで複数のクラスを拡張することはできません。 子クラス のプロパティを継承できませんでした 複数の親クラス 単一のインスタンスで、結果として ダイヤモンドの問題。 この問題を克服するには、 インターフェース が紹介されています。例を通してこの問題を理解しましょう。



2つの飛行機があり、1つは運ぶことができるだけであると仮定しましょう 乗客、 もう1つだけ ポジション。 今、私たちはする必要があります 継承 貨物機と旅客機の両方の特性。 Javaは、最終的にこのソリューションをサポートしません。 あいまいさ 2つの平面の間。

しかし、Javaに1つの平面を継承していると感じさせることでそれを可能にできれば、 実装 他の平面に存在するメソッド。それは乗客と貨物の両方の荷物を運ぶ商用飛行機のようなものです。インターフェースは、互いのコンポーネントに干渉することなく両方のタスクを実行できるより大きな平面を作成するようなものであり、代わりにメソッドを借用するだけです。 インターフェイスクラス。

//クラスAコード

パッケージ複数クラスA {void msg(){System.out.println( 'Hello')}}

//クラスBコード

パッケージ複数クラスB {void msg(){System.out.println( 'Welcome')}}

クラスCコード

package multiple class C extends A、B {//これはJavaで受け入れられず、エラーがスローされ、コードは実行されません。 public static void main(String args []){C obj = new C()obj.msg()}}

出力:

エラー。この特定のアプローチは例外をスローします。 Javaは多重継承をサポートしていません。このエラーは、 ダイヤモンド問題 

インターフェイスを使用して解決策を試してみましょう。 子クラス からメソッドにアクセスできます 複数の親 単一インスタンスのクラス。

//インターフェースコード

パッケージMISパブリックインターフェイスソリューション{publicvoid Hello()public void Welcome()}

//クラスコード

パッケージMISpublic classclassAはソリューションを実装します{publicvoid Hello(){java.lang.System.out.println( 'Hello world')} public void Welcome(){java.lang.System.out.println( 'Welcome to Edureka ')} public static void main(String [] args){classA Edureka = new classA()Edureka.Hello()Edureka.Welcome()}}

出力:

こんにちは世界
エドゥレカへようこそ

Javaインターフェースの宣言:構文

interface interface_name {//定数フィールドを宣言する// methods()を宣言する//デフォルトのメソッド}

Javaインターフェイスの例を見てみましょう

Javaインターフェースの例

Javaインターフェイスに基づいた簡単な電卓を作成しましょう。

//インターフェースコード

パッケージの基本操作publicinterface maths {public void add()public void sub()public void mul()public void div()}

//クラスコード

パッケージbasicoperationsimport java.util.Scanner public class student1implements maths {@Override public void add(){Scanner kb = new Scanner(System.in)System.out.println( '加算を実行するために任意の2つの整数値を入力してください')int a = kb.nextInt()int b = kb.nextInt()int s = a + b System.out.println( 'Sum of' + a + 'and' + b + 'is' + s)} @Override public void sub (){スキャナーkb = new Scanner(System.in)System.out.println( '減算を実行するために任意の2つの整数値を入力してください')int a = kb.nextInt()int b = kb.nextInt()int s = ab System.out.println( '' + a + 'と' + b + 'の差は' + s)} @Override public void mul(){Scanner kb = new Scanner(System.in)System.out.println( 'Enter任意の2つの整数値の乗算 ')int a = kb.nextInt()int b = kb.nextInt()int s = a * b System.out.println(' '+ a +'と '+ b +'の積は '+ s)} @Override public void div(){Scanner kb = new Scanner(System.in)System.out.println( 'Enter any two integer values Division')int a = kb.nextInt()int b = kb.nextInt ()int s = a / b System.out.p rintln( '' + a + 'および' + b + 'の商は' + s)} public static void main(String [] args){student1 Edureka1 = new student1()Edureka1.add()Edureka1.sub()Edureka1。 mul()Edureka1.div()}}

出力:

さらに進んで、Javaインターフェイスをネストする方法を学びます。

Javaインターフェイスのネスト

インターフェイスのネスト 別の内部のインターフェイスを宣言するプロセスです 既存のインターフェース または内部のインターフェイスを宣言する クラス。 ネストされたインターフェイスは、 内部インターフェース。

ネストされたインターフェイスにアクセスできません 直接 。したがって、ネストは、名前空間を関連するものとグループ化することによって名前空間を解決するために実装されます。 インターフェイス そして クラス。 この手順により、私たちは ネストされたインターフェイス を通って アウタークラス または 外部インターフェース 名前の後に dot(。) 、および インターフェイス名。

に基づいていくつかの例を試してみましょう インターフェイスのネスト。 まず、ネストしてみましょう Javaインターフェース 別の内部 Javaインターフェース 以下に示すように:

//インターフェースコード

パッケージNestパブリックインターフェイスOuterInterface {void display()interface InnerInterface {void InnerMethod()}}

//クラスコード

パッケージNestクラスNestedInterfaceDemoはOuterInterface.InnerInterfaceを実装します{publicvoid InnerMethod(){int n = 10、t1 = 0、t2 = 1 System.out.print( 'First' + n + 'terms:')for(int i = 1 i&lt = n ++ i){System.out.print(t1 + '+')int sum = t1 + t2 t1 = t2 t2 = sum} System.out.println( 'nネストされたInnerInterfaceメソッドからの印刷...! n ')} public static void main(String args []){OuterInterface.InnerInterface obj = new NestedInterfaceDemo()obj.InnerMethod()}}

出力:

最初の10項:0 + 1 + 1 + 2 + 3 + 5 + 8 + 13 + 21 + 34 +ネストされたInnerInterfaceメソッドからの印刷...!

さて、ネストしてみましょう JavaインターフェースJavaクラス。

//インターフェースコード

パッケージNest2パブリッククラスEdurekaClass {インターフェイスEdurekaInterface {void NestedMethod()}}

//クラスコード

パッケージNest2クラスNestedInterfaceDemo2はEdurekaClass.EdurekaInterface {public void NestedMethod(){String input = 'Edureka' byte [] strAsByteArray = input.getBytes()byte [] result = new byte [strAsByteArray.length] for(int i = 0 i&ltstrAsByteArray .length i ++)result [i] = strAsByteArray [strAsByteArray.length-i-1] System.out.println(new String(result))} public static void main(String args []){EdurekaClass.EdurekaInterface obj = new NestedInterfaceDemo2 ()obj.NestedMethod()}}

出力:

akerudE

インターフェイスはクラスとほとんど同じように見えますが、それらの間にはいくつかの違いがあります。それらの違いについて説明しましょう。

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

インターフェース クラス
多重継承をサポート 多重継承をサポートしていません
データメンバーがありません データメンバーを含む
コンストラクターがありません コンストラクターが含まれています
不完全なメンバー(署名メンバー)を含む Complete(Abstract)メンバーとIncompleteメンバーの両方が含まれます
アクセス修飾子がありません アクセス修飾子が含まれています
インターフェイスに静的メンバーがありません クラスのすべてのメンバーは静的です

Javaインターフェイスの長所と短所

利点:

  • Javaインターフェイスはサポートします 多重継承。
  • Java Interfaceを使用すると、プログラマーは複雑なプログラミングアプローチを分割し、 依存関係 オブジェクト間。
  • Javaインターフェイスは データメンバー そして メソッド 疎結合されるアプリケーションで。

短所:

  • Javaインターフェイスを使用すると、 実行速度 アプリケーションの。
  • アプリケーションのJavaインターフェイスは、繰り返し使用されるか、ほとんど使用されません。

Javaインターフェイスのキーポイント

  • インターフェイスで宣言されたメソッドには、完全な抽象化を提供する本体がありません。
  • インターフェイスのオブジェクトを作成することはできません。したがって、インターフェイスのインスタンス化はできません。
  • クラスは、キーワードimplementsを使用してインターフェースを実装できます。例を通してこれを見てみましょう。

//インターフェースコード

パッケージextInterfacepublic interface extInterface {public void method1()public void method2()}

//クラスコード

Javaで文字列を日付に変換する
パッケージextInterfaceimportjava.util.ScannerクラスEdurekaはextInterfaceを実装します{publicvoid method1(){System.out.println( 'implementation of method1')Scanner Scanner = new Scanner(System.in)System.out.println( 'Enter number Javaで平方根を見つけるには: ')double square = Scanner.nextDouble()double squareRoot = Math.sqrt(square)System.out.printf('数値の平方根:%fは:%f%n '、square、 squareRoot)} public void method2(){System.out.println( 'implementation of method2')} public static void main(String arg []){extInterface obj = new Edureka()obj.method1()}}

出力:

method1の実装Javaで平方根を見つけるために数値を入力します:16数値の平方根:16.0は:4.0
  • クラスは、単一のインスタンスで複数の継承を実装できます。次のコードで理解しましょう。

//インターフェース1コード

パッケージExtendIntパブリックインターフェイスInterface1 {public void armstrong()}

//インターフェース2コード

package ExtendInt public interface Interface2 {public void prime()} //クラスコードパッケージExtendIntpublic class Edureka2はInterface1、Interface2を実装します{public void armstrong(){int c = 0、a、temp int n = 153 // input temp = n while(n&gt0){a = n%10 n = n / 10 c = c +(a * a * a)} if(temp == c)System.out.println( 'armstrong number')else System.out.println ( 'アームストロング数ではありません')System.out.println( 'Extending to Interface 1')} public void prime(){int i、m = 0、flag = 0 int n = // input m = n / 2 if (n == 0 || n == 1){System.out.println(n + 'は素数ではありません')} else {for(i = 2i&lt = mi ++){if(n%i == 0){System .out.println(n + 'は素数ではありません')flag = 1 break}} if(flag == 0){System.out.println(n + 'は素数です')}} System.out.println( 'Extendingインターフェイス2 ')} public static void main(String args []){Interface2 obj = new Edureka2()obj.prime()Interface1 obj1 = new Edureka2()obj1.armstrong()}}

出力:

3は素数であり、インターフェイス2に拡張されます。armstrong番号はインターフェイス1に拡張されます。
  • Java Interfaceでは、宣言時に宣言された変数を初期化する必要があります。
  • インターフェイスのアクセス修飾子は、デフォルトでpublicstaticおよびfinalに設定されています。例でこれを理解しましょう

//インターフェースコード

パッケージテストパブリックインターフェイスTry {// public int a = 10 // public static final int a = 10 // static int a = 0 // final int a = 10 // int a = 10}
  • 上記の宣言はすべて、インターフェイス内で真で有効です。
  • Java Interfaceは、任意の数のInterfaceを拡張できますが、実装することはできません。
  • Javaクラスは、任意の数のインターフェースを実装できます。
  • Javaクラスは、同じメソッド名と異なる戻り値の型を持つインターフェースを実装できません。
  • 同じメソッド名を持つメソッドが複数あり、複数のインターフェースに存在する場合は、メソッドを1回実装するだけで十分です。これを実際の例で理解しましょう。

//インターフェースコード

package same public interface A {public void display()} //インターフェースコードパッケージsamepublic interface B {public void display()} //クラスコードパッケージsameclass sameimplements A、B {public void display(){System.out .println( 'displaying data')} public static void main(String [] args){same print = new same()print.display()}}

出力:

EdurekaEラーニングへようこそ

これで、この記事は終わりです。インターフェイス、構文、機能、インターフェイスのネスト、Javaインターフェイスのキーポイント、およびそれらを使用して実行される操作の重要性を理解していただければ幸いです。

Javaの基本を理解したので、 25万人以上の満足した学習者のネットワークを持つ信頼できるオンライン学習会社であるEdurekaが世界中に広がっています。 EdurekaのJavaJ2EEおよびSOAトレーニングおよび認定コースは、Java開発者になりたい学生および専門家向けに設計されています。このコースは、Javaプログラミングをすぐに開始できるように設計されており、Hibernateや

質問がありますか?この「JavaInterface」ブログのコメントセクションで言及してください。できるだけ早くご連絡いたします。