2013-12-14 19 views
0

我有一個抽象類和抽象的setter方法,它需要String作爲參數,但我希望我的一個子類的setter採用另一種類型的參數。如何在抽象方法中給出不同的參數?

我想這樣做,而不使用泛型。

可能嗎?

+0

你的意思是「泛型「而不是」集合「? –

+0

是的,你是對的。我很困惑,我的意思是泛型。 – user2775902

回答

3

您可以超載二傳手在子類:

@Override 
public void setProperty(String firstArg) { 
    ... 
} 

public void setProperty(Integer value) { 
... 
} 
0

你會做到這一點沒有泛型,但我認爲你需要他們:

public abstract class MyClass<T> { 
    public abstract void setX(T t); 
} 

public class MySubClass extends MyClass<String> { 
    public void setX(String s) { 
    } 
} 

public class MySpecialSubClass extends MyClass<Integer> { 
    public void setX(Integer s) { 
    } 
} 
+0

那麼以前的答案是不正確的? – user2775902

+0

不確定 - 這取決於。另一個答案是,如果你有一個聲明爲抽象類的變量,編譯器就不會知道它是特殊子類的一個實例,所以重載的方法將不可訪問。你將不得不聲明變量作爲特殊子類的「看到」重載的方法。請注意,這個答案並不好,因爲你仍然需要知道參數的類型,但至少你不需要知道實現類是什麼。這個答案與實現更加脫鉤,這總是一件好事。 – Bohemian

相關問題