2

死者を蘇らせてごめんなさい。しかし、私は仕様のこのセクションが何を述べているのかまだ明確に理解していません。

インターフェイスに直接のスーパーインターフェイスがない場合、インターフェイスは、署名 s、戻り値の型 r、および throws 句 t を持つ各パブリック インスタンス メソッド m に対応する、シグネチャ s、戻り値の型 r、および throws 句 t を持つパブリック抽象メンバー メソッド m を暗黙的に宣言します。ただし、同じシグネチャ、同じ戻り値の型、および互換性のある throws 句を持つメソッドがインターフェイスによって明示的に宣言されている場合を除きます。m が Object で final として宣言されている場合に、インターフェイスがそのようなメソッド m を明示的に宣言すると、コンパイル時エラーになります。

与えられた

interface Testing
{
    void test();
}
public class Test{
    public static void main(String[] args) {
        Testing t = new Testing(){
            @Override
            public void test(){
            }
        };
        t.test();
        t.toString();
    }
}

仕様に記載されているように、上記は次のように変更されます

    interface Testing
    {
        void test();
        String toString();
        //other non-final methods of Object
    }
    public class Test{
        public static void main(String[] args) {
            Testing t = new Testing(){
                @Override
                public void test(){
                }
            };
            t.test();
            t.toString(); 
        }
    }

また。インターフェイスの階層があるかどうかを確認してください。すべてのインターフェイスがこれらの抽象メソッドを取得します。

4

2 に答える 2

1

これが意味することは、すべてのクラスが (クラス階層のある時点で) Object を拡張するということです。ただし、インターフェースは Object を拡張しません。これは、複数の継承から生じる問題を回避するためです。

インターフェースは拡張されないため、アクセスしたオブジェクトのタイプ (クラスではない) がインターフェースであった場合のObjectように、メソッドを使用できませんでした。toStringしかし、ある時点ですべてのクラスが から拡張されるため、これらのメソッドが利用可能でなければならないことはわかっていますObject。したがって、この問題を回避するために、すべてのObject最終ではないメソッドは、スーパーインターフェースを持たないすべてのインターフェースで暗黙的に宣言されます。すべてのクラスはある時点で から拡張する必要があるため、これらのメソッドのこれらのコントラクトは常に満たされObjectます。

TL;DR --Objectタイプがインターフェースである変数にクラスのインスタンスが格納されている場合 (例Serializable:

編集:あなたの質問に答えるには、あなたは少しずれています。Objectインターフェイスに親インターフェイスがなく、追加するメソッドごとに、一致するメソッドがインターフェイスによって明示的に宣言されていない場合、すべての非最終メソッドがインターフェイスに追加されます (使用されているかどうかに関係なく)。

于 2012-09-17T09:32:26.947 に答える
0

インターフェイスへのスーパーインターフェイスがない限り、Objectクラスメソッドの暗黙の宣言を取得します。これらのメソッドがインターフェースに含まれている限り。このインターフェイスを拡張または実装するすべてのインターフェイスは、このインターフェイスによって明示的に宣言されているメソッドと暗黙的に取得されているメソッドの間に大きな違いはありません。その点は、インターフェースが明示的に宣言されているのと同じくらい優れていることを示しています。

于 2012-09-17T09:15:37.737 に答える