2016-09-13 7 views
2

JLSにして、オブジェクトのメソッドの必須(暗黙の)宣言の背後にある理由9.2それはインタフェースが直接的上位を、持っていない場合、インタフェースは暗黙のうちに、パブリック抽象メンバを宣言しのJava:任意のインターフェイス定義の段落で

語ります同じ署名、同じ戻り型、および同じ戻り型を持つメソッドがない限り、署名s、戻り型r、およびオブジェクトに宣言されたthrows句tを持つ各公開インスタンスメソッドmに対応する署名s、戻り型r、およびthrows句tを持つメソッドm互換性のあるthrows節は、インタフェースによって明示的に宣言されます。

宣言が仮説的に省略された場合、コンパイル時エラーが発生します。しかし、なぜコンパイラはこれらの宣言を要求するのですか?いずれのクラスもObjectのメソッドを継承します。つまり、これらのメソッドに関しては、特定の動作はすでに保証されていますか?どのインタフェース定義でもこれらの宣言を必要とする理由は何でしょうか?

public void printList(List<?> list) { 
    System.out.println(list.toString()); 
} 

これはタイプListを動作させるための方法toString()を宣言する必要があります。

+0

https://stackoverflow.com/questions/16255073/why-do-interfaces-extend-object-according-to-the-class-file-formatの重複? –

答えて

2

は、このコードを検討してください。 ListObjectのサブタイプではないことに注意してください。

+0

JSLのhttp://docs.oracle.com/javase/specs/jls/se8/html/jls-4.html#jls-4.10.2を確認すると、インターフェイスにObjectが存在する場合は直接スーパータイプとして表示されます直接スーパーインタフェース – Keith

関連する問題