2017-01-02 9 views
1

以下の例はエラーなしで実行されますが、どのように動作するのか説明できますか?インターフェイスにtoString()/ hashcode/equalsメソッド宣言が含まれていないため、 ?、私の理解toString()/ hashcode/equalsまたはObjectクラスのメソッドは、インターフェイス内のデフォルトで宣言されますか?間違っていると私を訂正してください。インタフェース内のtoString、hashcode、equalsメソッド

interface int1 { public void show(); }

class inttest implements int1 
{ 

    public void show() 
    { 
     System.out.println("inttest.show()"); 
    } 

    @Override 
    public String toString() 
    { 
     return "tostring called"; 
    } 
} 

public class MainClass1 
{ 
    public static void main(String[] args) { 
     int1 i=new inttest(); 
     System.out.println(i.toString()); 

    } 
} 

答えて

3

どれインタフェースはObjectクラスのすべてのパブリックメソッドを持っている(それがいずれかのスーパーインタフェースからそれらを継承するか、すでに明示的に宣言されていない場合は、暗黙的にそれらを宣言します)。

どのインタフェースの実装クラスもObjectクラスの(直接的または直接的な)サブクラスでなければならないので、意味があります。したがって、すべてのObjectメソッドの実装を継承します。

9.2. Interface Members

インターフェースは直接的なスーパを有していない場合、インタフェースは、暗黙的、署名Sとパブリック抽象メンバメソッドmを宣言リターンタイプR、および各パブリックインスタンスメソッドmに対応する句tをスロー同じ戻り型、および互換性のあるthrows節を持つ抽象メソッドがインタフェースによって明示的に宣言されている場合を除き、Objectで宣言された署名s、戻り型rおよびthrows節t。

+0

ありがとうございました。 –

0

ObjectObjectにはすべてtoString()が含まれていますので、そのメソッドを呼び出すことになります。

関連する問題