2015-03-19 166 views
0

我有以下情況:有一個抽象類(abs),並從abscon1con2Java的泛型參數抽象方法

現在我想要腹肌有一個參數的抽象功能擴展兩個類參數的類型必須是類本身的類型。

我試圖在abs類以下內容:

public abstract void foo(abs i); 

con1con2如下:

public abstract void foo(con1 i); 
public abstract void foo(con1 i); 

但這並沒有工作。解決這樣的問題的一般方法是什麼?

+0

「這沒有用」是從來沒有足夠的信息。與其僅僅描述問題,你應該給出一個簡短但完整的例子來證明它,並且包括你得到的確切的錯誤信息。 – 2015-03-19 11:32:58

回答

0

的方法定義應該是CN1和CN2一樣:

@override 
public abstract void foo(abs i) 
{ ... 

這裏標註的支票,你是真的在這裏重寫父。谷歌「繼承和多態」

2

不,基本上沒有實現該方法。有了你已經得到了聲明,我應該能夠編寫:

abs x = new con1(); 
abs y = new con2(); 
x.foo(y); 

這聽起來像你想:

public abstract class Abstract<T extends Abstract<T>> 
{ 
    public abstract void foo(T t); 
} 

然後:

public final class Concrete1 extends Abstract<Concrete1> 
{ 
    @Override public void foo(Concrete1 x) { ... } 
} 

注意,這並未完全執行它,因爲你仍然可以寫:

public final class Evil extends Abstract<Concrete1> 

...但它至少在每個人「按規則行事」時都有效。

+0

感謝Jon的回答。你說你應該可以寫abs x = new con1(); abs y = new con2(); x.foo(y);這在我的場合應該是非法的。和「公共最終課程Concrete1擴展摘要」對我來說聽起來非常多餘。但如果這是唯一的解決方案,我會採取這種方法。謝謝:) – 2015-03-19 11:39:40

+0

@DanielRoss:用你在問題中描述代碼的方式,是的。這*不適用於我提供的代碼。 – 2015-03-19 11:40:48