私が知っているように、サブクラスのコンストラクターは、を使用してスーパークラスのコンストラクターを呼び出しますsuper();
。しかし、インターフェイスにはコンストラクターがないため、継承はどのように行われるのでしょうか?
5 に答える
しかし、インターフェイスにはコンストラクターがないため、どのように継承を行うことができますか??
簡単です。インターフェイスはインスタンス フィールドを持つことができないため、構築するものは何もありません。インターフェイスにコードを配置することはできません(とにかくJava 7まで)。呼び出す必要があるものは何もありません。
インターフェイスはコントラクトであり、実装によって提供される必要があるメソッドを定義します。クラスはインターフェイスを継承しませんが、実装します。
仕様から:
この型には実装がありませんが、抽象メソッドの実装を提供することにより、無関係なクラスが実装できます。
インターフェイス (サービス コントラクトとも呼ばれます) は、構築されるのではなく、実装されます。クラスが提供する一連のメソッド (サービス) を定義するため、クライアントは、インターフェイスを実装する実際の型に関係なく、実装するクラスに何が期待できるかを知ることができます。コンストラクターは、特定の型のこの特定のインスタンスに関連しており、インターフェイスを実装しています。
IYourObject yourObject = new YourObject();
一方、インターフェイスの継承も拡張によるものです。インターフェイスのメソッドを別のメソッドに「追加」し、「階層」内のさまざまなインターフェイス間でオブジェクトのインターフェイス タイプを切り替えることができるようにします。
インターフェースは継承されていません - むしろ実装されています
次の理由により、インターフェイスにはコンストラクターが含まれていません。
- インターフェイスのデータ メンバは既に初期化されています。
- 定義済みおよびさらにインターフェースデータメンバーに許可されていない特別な定義済みメソッドのコンストラクターは静的です。