2016-07-06 118 views
3

實現我有,我想繼承這個抽象類:一個抽象類

public abstract class MyFirstClass<K extends Comparable<K>, V> implements Iterable<MySecondClass<K, V>> 
{ 
    // Abstract methods 
} 

我真的不知道該怎麼寫擴展了這個抽象類的類的聲明。我想過這樣的:

public class MyFirstClassImpl<K, V> extends MyFirstClass<Object, Object> 
{ 
    @Override 
    public Iterator iterator() 
    { 
     // Code 
    } 

    // Implementation of abstract methods from MyFirstClass 
} 

但是這麼想的似乎工作的方式,我很難找到一個解釋這樣那樣的問題。

回答

0

如果子類也應該是通用的,它應該有相同的通用參數聲明爲基類:

public class MyFirstClassImpl<K extends Comparable<K>, V> extends MyFirstClass<K,V> 
{ 
    @Override 
    public Iterator<MySecondClass<K, V>> iterator() 
    { 
    // Code 
    } 
} 

否則,你的子類不應該有任何泛型類型參數在所有:

public class MyFirstClassImpl extends MyFirstClass<SomeClassThatImplementsComparable, Object> 
{ 
    @Override 
    public Iterator<MySecondClass<SomeClassThatImplementsComparable,Object>> iterator() 
    { 
     // Code 
    } 

    // Implementation of abstract methods from MyFirstClass 
} 
+0

謝謝!這就是我一直在尋找的!我需要的子類也是通用的:) – yowazzupjoe

2

問題出在您的第一個參數化類型:Object

Object沒有實現Comparable<Object>,從而K extends Comparable<K>不是由你Object參數化的K驗證。

另請注意,您的iterator覆蓋也應該參數化!

一個簡單的實現你的abstract類的一個例子是:

public class MyFirstClassImpl<K, V> extends MyFirstClass<String, Object> { 
    @Override 
    public Iterator<MySecondClass<String, Object>> iterator() { 
     // TODO 
     return null; 
    } 
} 

...爲String工具Comparable<String>