インタフェース


インタフェース
クラスまたはプログラムが提供する機能の役割を明確に宣言します.インタフェースは抽象メソッドと定数のみで構成されます.実装されたコードがないため、インスタンスも作成できません.
インタフェースは、クライアント・プログラムにどのような方法を提供するかを示す事前宣言(specification)または約束されたロールです.
インタフェースの役割は、インタフェースを実装するクラスがどのような機能を提供するかを示す方法である.その後、クライアント・プログラムは、インタフェースに約束されたリストに従って実装されたクラスを生成して使用することができる.
public interface Calc {
	double PI = 3.14;
    	int ERROR = -9999999999;
        
        int add(int num1, int num2);
        int substract(int num1, int num2);
        int times(int num1, int num2);
        int divide(int num1, int num2);
}
インタフェースで宣言される方法は,いずれも実装コードのない抽象的な方法である.これらのメソッドは、public abstractリザーバを明示的に書き込むことなく、コンパイル中に抽象メソッドに自動的に追加され、変換されます.
また、インタフェースで宣言されたすべての変数は、コンパイル中に値が変わらない定数に自動的に変換されます.
public static final予約語を使わなくても自動的に追加され、定数とみなされます.
インタフェースは、クラスで使用される「クラスでインタフェースを実装する」として表されます.
implementsリザーブ語を使用して、クラスがインタフェース宣言を実現する機能を表します.
CalculatorクラスでCalcインタフェースを実装する方法は次のとおりです.
public class Calculator implements Calc {
	@Override
    	public int add(int num1, int num2) {
        	return (num1 + num2);
        }
        @Override
        public int substract(int num1, int num2) {
        	return (num1 - num2);
        }
}
ただし、上記のコードのみを記述するとエラーが発生します.Calcインタフェースに含まれる抽象的な方法が実現されていないためである.
したがって,抽象メソッドを実装したり,Calculatorクラスを抽象クラスとして作成したりすることは解決される.
インタフェースも継承のように、サブクラスを親データ型に暗黙的に変換できます.
public class CompleteCalc extends Calculator {
	@Override
    	public int times(int num1, int num2) {
        	return (num1 * num2);
        }
        
        @Override
        public int divide(int num1, int num2) {
        	if (num2 != 0)
            		return (num1 / num2);
            	else
                	return (Calc.ERROR);
        }
}
CompleteCalcクラスは、より上位レベルのCalculatorクラスであり、Calcインタフェースが実装されているため、Calcクラスでもある.
したがって、次のコードを使用できます.
Calc calc = new CompleteCalc();
インタフェースを実装するクラスがある場合、クラスは対応する暗黙的な変換を行い、変換後に使用できるメソッドはインタフェースで宣言されたメソッドのみです.
Defourメソッドと静的メソッド実装部がなければ,インタフェースはハウジングである.インタフェースを使用すると、多形性が実現され、拡張可能なプログラムが作成されます.つまり、クライアント・プログラムを変更することなく、機能を追加したり、他の機能を使用したりすることができます.
かいめんていすう
インタフェースは抽象的な方法で構成され,インスタンスを作成することも,セシウム型変数を使用することもできない.ただし、インタフェースで変数(次のコードなど)を宣言した場合、エラーは発生しません.これは,インタフェースで宣言された変数をコンパイルすると,共通静的finalが貼り付けられ定数に変換されるためである.
public interface Calc {
	double PI = 3.14;
    	int ERROR = -9999999999;
}
Calcインタフェースで宣言された変数PIをコンパイルします.double PI = 3.14;コードpublic static final double PI = 3.14に変換されます.
あるインタフェースを実装する複数のクラスで使用される方法は、各クラスに同じ機能を提供する場合がある.
Java 8から、インタフェースの利用率を向上させるために、デフォルトメソッドと静的メソッド機能が提供されます.デフォルトの方法は、インタフェースから実装コードの作成方法です.これは、インタフェースを実装するクラスにデフォルトの方法です.
静的メソッドは、インスタンスの作成に関係なく使用可能なメソッドです.デフォルトのメソッドまたは静的メソッドが追加されても、インタフェースはインスタンスを作成できません.
エラーメソッド
その名の通り、これは基本的に提供される方法です.デフォルトのメソッドはインタフェースで実装されますが、後でインタフェースを実装するクラスがある場合は、このクラスで使用される基本的な機能です.デフォルトメソッドを宣言するときにdefaultリザーバを使用します.
デフォルトのメソッドは通常のメソッドと同様で、メソッド資料型の前にdefault予約語を使用するだけでよい.
サブクラスでデフォルトのメソッドを再定義できます.
スタティツクメソッド
静的メソッドはstaticリザーブ語を使用して宣言され、インスタンスの作成には関係ありません.静的メソッドを使用する場合は、インタフェース名を直接参照します.
プライベートメソッド
Java 9から、privateメソッドをインタフェースで実装できます.privateメソッドは、インタフェースを実装するクラスで使用または再定義できません.したがって、既存のインプリメンテーションのコードを変更せずにインプリメンテーションインタフェースのクラスで共通であれば、プライベートメソッドによりインプリメンテーションすることができ、コードの再利用性を向上させることができる.また、クライアント・プログラムに提供される基本機能は、プライベート・メソッドとして実装されます.
privateメソッドはすべてのコードを実装する必要があるため、抽象メソッドではprivateリザーブ語を使用することはできませんが、静的リザーブ語を同時に使用することができます.private静的メソッドは静的メソッドによって呼び出されます.
public interface Calc {
	default void description() {
    		System.out.println("정수 계산기를 구현합니다.");
        	myMethod();
        }
        
        static int total(int[] arr) {
        	int total = 0;
            
            	for (int i: arr) {
                	total += i;
                }
                myStaticMethod();
                return total;
        }
        
        private void myMethod() {
        	System.out.println("private 메서드입니다.");
        }
        
        private static void myStaticMethod() {
        	System.out.println("private static 메서드입니다.");
        }
}
1つのクラスは複数のインタフェースを実装します.
インタフェースは、1つのクラスによって複数のインタフェースを実装することができる.
public interface Buy {
	void buy();
}

public interface Sell {
	void sell();
}

public class Customer implements Buy, Sell {
	@Override
    	public void sell() {
        	System.out.println("구매하기");
        }
        
    	@Override
        public void buy() {
        	System.out.println("판매하기");
        }
}
2つのインタフェースで同じ名前のメソッドが宣言されても、インプリメンテーションはクラスで行われるため、メソッドを呼び出す必要はありません.この2つの界面を実現するCustomerクラスはBuy型でもSell型でもある.
public class CustomerTest {
	public static void main(String[] args) {
    		Customer customer = new Customer();
    		Buy buyer = customer;
            	buyer.buy();
                Sell seller = customer;
                seller.sell();
                
                if (seller instanceof Customer) {
                	Customer customer2 = (Customer)seller;
                    	customer2.buy();
                        customer2.sell();
                }
    	}
}
2つのインタフェースのエラーメソッドが重複している場合は、2つのインタフェースを実装するクラスで再定義する必要があります.
インタフェースの継承
インタフェース間で継承できます.インタフェース間の継承は,コード継承機能を実装するものではないので,タイプ継承と呼ぶ.クラスは1つのクラスしか継承できませんが、インタフェースは複数を継承できます.1つのインタフェースが複数のインタフェースを継承している場合、継承されたインタフェースには、親インタフェースに宣言されるすべての抽象メソッドがあります.
クラスを継承するときに使用するextendsリザーバを使用します.
インタフェースの実装と継承を同時に書き込む
1つのクラスでクラス継承とインタフェース実装を同時に行うことができます.
public class BookShelf extends Shelf implements Queue {
	...
}
インタフェースによる多機能化
インタフェースは、クラスを宣言および設計する機能です.複数のクラスが異なるメソッドを実装する場合、まずインタフェースにメソッドを宣言し、その後、各実装インタフェースのクラスで同じメソッドに対して異なる機能を実装する.これがインタフェースを利用した多形式の体現である.
インタフェースを定義することは、拡張可能なプログラムの作成の始まりです.
たとえば、企業によって使用されるデータベースが異なります.
データベース機能を実行するインタフェースの定義
インタフェース定義に基づいて複数のデータベース関連モジュールを開発
JDBC(Java DataBase Connectivity)
Javaとデータベースを接続する役割を果たします.Javaとデータベースを接続するには、接続接続の作成と接続を行う複数の機能が必要です.
Javaとデータベースを接続するための接続はインタフェースです.このインタフェースには、データベースにアクセスするJavaプログラムを実装するためのさまざまな方法が実装されています.
JDBCは、Javaでデータベースをどのように使用するかを説明するリスト、すなわち約束です.
整理する
  • クラスのインタフェースを実装するための予約語はimplementsである.
  • クラスがインタフェースを実装するときにインタフェースで宣言されたすべてのメソッドを実装していない場合、クラスは抽象クラスになります.
  • インタフェースで宣言された変数は、コンパイル時に定数に変換されます.
  • 1つの
  • インタフェースが複数の異なる方法で実装される場合、プログラムは、インタフェース宣言メソッドを使用する場合、各クラス実装コンテンツと同じ方法を使用することができる.このように同一のコードが複数の実装コンテンツとして実行されるオブジェクト向け特性を多形性と呼ぶ.
  • インタフェースにおいて、実装コードを提供する方法は、デフォルト方法および静的方法である.
  • は、1つのクラスにおいて複数のインタフェースを実装することができる.
  • ソース
    doit javaプログラミング入門