インターフェースについて
インターフェースは、メソッドが実装されていないクラスのようなものです。メソッドの署名はありますが、各メソッドの本文は空です。インターフェースを使用するには、インターフェースに含まれるすべてのメソッドの本文を提供することによって、別のクラスがインターフェースを実装する必要があります。
インターフェースにより、コードで抽象化レイヤを使用できます。インターフェースは、メソッドの特定の実装をメソッドの宣言から切り離します。これにより、1 つのメソッドをアプリケーションに基づいて別々に実装できます。
インターフェ��スの定義は、新しいクラスの定義に似ています。たとえば、ある企業に 2 種類の注文があるとします。顧客からの注文と、従業員からの注文です。どちらも注文の 1 つのタイプです。割引をするメソッドが必要であるとします。割引額は、注文のタイプにより異なります。
注文の一般的な概念をインターフェースとしてモデリングし、顧客用および従業員用に実装します。次の例では、注文の割引についてのみ示します。
これは PurchaseOrder インターフェースの定義です。
1// An interface that defines what a purchase order looks like in general
2public interface PurchaseOrder {
3 // All other functionality excluded
4 Double discount();
5}このクラスは、顧客の注文用の PurchaseOrder インターフェースを実装します。
1// One implementation of the interface for customers
2public class CustomerPurchaseOrder implements PurchaseOrder {
3 public Double discount() {
4 return .05; // Flat 5% discount
5 }
6}このクラスは、従業員の注文用の PurchaseOrder インターフェースを実装します。
1// Another implementation of the interface for employees
2public class EmployeePurchaseOrder implements PurchaseOrder {
3 public Double discount() {
4 return .10; // It’s worth it being an employee! 10% discount
5 }
6}- インターフェース PurchaseOrder は汎用的なプロトタイプとして定義されています。インターフェース内で定義されているメソッドにはアクセス修飾子はなく、その署名のみが含まれます。
- CustomerPurchaseOrder クラスはこのインターフェースを実装しているため、discount メソッドの定義を提供する必要があります。Java では、インターフェースを実装するすべてのクラスで、インターフェースに含まれるすべてのメソッドを定義する必要があります。
新しいインターフェースを定義する場合、新しいデータ型を定���することになります。インターフェース名は、他のデータ型の名前を使用できる場所であれば、どの場所でも使用できます。型がインターフェースである変数を定義する場合、それに割り当てるオブジェクトはインターフェースを実装するクラスのインスタンスまたはサブインターフェースデータ型でなければなりません。
「クラスとキャスト」も参照してください。