2017-01-02 97 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,返回類型爲r的公共抽象成員方法米,和throws子句噸對應於每個公共實例方法米與簽名s,返回類型r,並拋出在Object中聲明的子句t,除非具有相同簽名,相同返回類型和兼容throws子句的抽象方法由接口顯式聲明。

+0

謝謝,這非常有幫助 –

0

由於所有對象都擴展了ObjectObject有一個toString()您正在調用該方法。

相關問題