2012-09-26 92 views
0

我的類架構是這樣的。存在子類方法時調用基類方法

我有一個接口「myInterface」。我創建了一個實現「myInterface」的類「mySuperMostClass」。現在我創建一個擴展「mySuperMostClass」的類「myBaseClass」。然後我創建「mySubClass」,它擴展了「myBaseClass」。我從「mySubClass」中的「myBaseClass」覆蓋了方法「methodA」,「methodB」。

「的methodB」從「了methodA」

叫做現在,我創建mySubClass一個對象,並以「MyInterface的」實例是指它。當我用myInterface的實例調用methodA時,將調用「myBaseClass」的實現。但我希望它叫「mySubClass」。請幫助我做到這一點。

我使用Java 1.5

+0

你在你的mySubClass兩個和了methodA指定的methodB @Override? – Scott

+1

請提供方法的代碼。確保方法聲明在拼寫或參數或返回類型中沒有差異。 – epsalon

+0

在您希望覆蓋超類方法的每個方法上使用@Override註釋。如果拼寫錯誤,編譯器會告訴你,而不是默默地創建一個新的非覆蓋方法。 –

回答

1

首先,我敢肯定,你的實際的類名稱不以小寫字母開頭。如果他們這樣做,我建議您閱讀有關Java Naming Convention

當從父類重寫方法確保方法簽名保持一致時。例如,如果您有一種名爲public void method(String input)的方法,則必須確保在子類中保留了相同的簽名。

所以,從閱讀你的問題,我認爲正確的實施將是這樣的:

public interface MyInterface{ 
} 

class MySuperMostClass implements MyInterface{ 

} 

class MyBaseClass extends MySuperMostClass{ 
    public void methodA(){ 
    } 

    public void methodB(){ 
    } 
} 

class MySubClass extends MyBaseClass{ 

    @override 
    public void methodA(){ 
     methodB(); 
    } 

    @override 
    public void methodB(){ 
    } 
} 

注:我不太確定你的方法實際簽名的,所以我」已將它們保留爲無參數。在你的情況下,確保簽名保持不變。

而且你會調用的方法是這樣的:

MyInterface myObject = new MySubClass(); 
myObject.methodA(); 
+0

簽名不包含返回類型。 –

+0

@VitorDeMario:我指的是特別的簽名,而不是返回類型:) – Sujay

+0

雅我沒有在代碼中提到@override .. –