我有以下的JAVA混亂,這是非常清楚對我說:接口,繼承和子類型
通用接口與兩個泛型類型A和B,如AIter<A,B>
另一個通用接口與一個額外的通用類型C,是這樣的:BIter<A,B,C> extends AIter<A,B>
一個通用類,ClassA<D>
,其遞歸地執行所述第一接口AIter作爲內部類這樣的:ThisIter implements AIter<Something,ThisIter>
另一個通用類,ClassB<D,E>
,其遞歸地執行所述第二接口布雷茲札克作爲內部類這樣的:ThisIter implements BIter<Something,ThisIter,SomethingElse>
兩個類的具有這樣的功能稱爲public ThisIter giveIter();
應返回內部類的實例(每個內部類的有一個類似的函數,它也返回一個新的實例,但是具有不同的參數)。
是否可以將ClassB作爲ClassA的子類型實現? (鑑於泛型類型是相同的,如ClassA<MyString>
和ClassB<MyString, somethingelse>
)
我似乎無法做到這一點,因爲ThisIter的實例和爲此返回類型的giveIter()是不兼容的。
一般問到,子接口(n)是接口本身實現的子類型的實現嗎?
伊特拉
public interface IterA<A,B> {}
IterB
public interface IterB<A,B,C> extends IterA<A,B> {}
ClassA的:
public class ClassA<L> {
Node root;
public ClassA() {
root= new Node();
}
protected class Node {
/*...*/
}
protected class Edge {
/*...*/
L varL;
}
protected class ThisIter implements IterA<Edge,ThisIter> {
/*...*/
}
public IterA<Edge,ThisIter> assoc() {
return new ThisIter(root);
}
}
ClassB的:
public class ClassB<L,N> {
Node root;
public ClassB() {
root= new Node();
}
protected class Node {
/*...*/
N varN;
}
protected class Edge {
/*...*/
L varL;
}
protected class ThisIter implements IterB<Edge,ThisIter,N> {
/*...*/
}
public IterB<Edge,ThisIter,N> assoc() {
return new ThisIter(root);
}
}
如果一個具有接口A和另一個接口B,其延伸接口A,是界面B的實現(類d),的一個子類型接口A的實現(C類)? – Bernd 2010-11-22 11:44:13
@Bernd:不,在這種情況下,它將是2個不同的類層次結構。一個從上到下,interfaceA - > interfaceB - > classD,另一個interfaceA - > classC。 – 2010-11-22 13:09:35
非常感謝! :) – Bernd 2010-11-22 13:11:14