2013-10-28 105 views
1

我具有A接口與方法getT()abstract B class與方法getS()和延伸B class其中implements A interfaceclass C。我在C子類中重寫A接口和B超類的方法。然後在main方法我實例化C類是typeo如果A像這樣:A obj = new C();我可以從obj調用getT(),但不能調用getS()方法。我如何從obj調用getS()方法,但我無法更改obj的類型,它必須是A。下面是代碼:Java靜態方法重寫和接口

接口A:

public interface A { 
    public String getT(); 
} 

抽象類B:

public abstract class B implements A { 
    public abstract String getS(); 
} 

亞類C:

public class C extends B { 

    @Override 
    public String getT() { 
     System.out.println("method getT() from C class"); 
     return null; 
    } 

    @Override 
    public String getS() { 
     return null; 
    } 

} 

和T類內的主要方法:

public class T { 

    public static void main(String[] args) { 
     A obj = new C(); 
     obj.getT(); 
    } 

} 
+2

這些「靜態方法」在哪裏?這個「壓倒一切」在哪裏? – user2864740

回答

1

隨着A類型的引用變量,你不能叫getS(),因爲它可以是任何類型實現A,比方說,AImplementer,不擴展從B。任何A對象不一定有getS()方法。只保證有一個getT()方法。

如果obj必須是一個類型A,你需要調用getS(),則包括在A接口的定義getS()方法:

public interface A { 
    public String getT(); 
    public String getS(); // Add this line. 
} 

然後B仍然是一個A,你可以調用getS()參考變量A

順便說一句,我沒有看到你的代碼中的任何static方法。靜態方法不能被覆蓋。

+0

對不起,我的抽象方法 – user2167174

0

obj的類型類是A,但A沒有方法getS(),所以你不能在主要方法中調用。 OBJ必須是B類或C類