首先,在Java中很漂亮,如果它是一個簡單的問題,抱歉。抽象類返回接口
我已經實現了一個抽象類和兩個擴展它的類。
public abstract class Lado{
//body
}
和兩個其它類這種形式例如
public class Arista extends Lado
{ //body
}
這樣,也沒有問題,現在我有這樣定義的接口。
public interface Grafo
{ //body
public List<Lado> lados();
//more body
}
有你看到的界面返回類拉多, 的名單,但在我執行我需要返回類阿里斯塔的列表或第二類(在界面的另一種實現方式)
在我所要使用的接口實現代碼庫有lados的)這樣
public List<Lado> lados() {
return lados;
}
與lados在我的代碼定義如下
實現(private List<Arista> lados;
和初始化
lados = new LinkedList<Arista>();
現在當然回報提供了一個錯誤
GrafoNoDirigido.java:141: error: incompatible types
return lados;
^
required: List<Lado>
found: List<Arista>
1 error
我似乎無法找到如何解決這個問題,而無需修改給了我基本的代碼(我重複不能改變它)。我知道我不能實例化一個抽象類對象,抽象類實現具有抽象類不支持的值和函數。
另外我不能使用覆蓋的原因,我不能改變我的功能簽名在我的實現。
我會感謝您的幫助,謝謝。
如果有什麼奇怪的東西,請讓我知道。
--------------------編輯--------- 拉多抽象類。
public abstract class Lado
{
private String id;
private double peso;
public Lado(String id, double peso) {
this.id = id;
this.peso = peso;
}
public String getId() {
return id;
}
public double getPeso() {
return peso;
}
public abstract String toString();
}
阿里斯塔子
public class Arista extends Lado
{
private Vertice u;
private Vertice v;
public Arista(String id, double peso, Vertice u, Vertice v){
super(id , peso);
this.u = u;
this.v = v;
}
public Vertice getExtremo1() {
return u;
}
public Vertice getExtremo2() {
return v;
}
public String toString() {
String s = "string";
return s;
}
}
然後,如果我返回List<Lado>
如果y嘗試做getExtremo1()
它doenst找到編譯符號(上拉多類沒有existant),試圖投輸出列表像List<Arista>
但它沒有正常工作。
的解決方法是將接口'Grafo'中的返回類型更改爲'List <?擴展Lado>'。但是,如果您不允許改變這一點,那麼您就被卡住了。 –
問:你的哪些類實際*實現了* Grafo? – FoggyDay
@FoggyDay該類實現在一個名爲GrafoDirigido的類中,另一個名爲Digrafo,這兩個工作在90%,我只需要使lados()函數正常工作。 pbabcdefp是的它的工作原理,不幸的是我不能改變給我的功能基地簽名。 謝謝。 – AlejandroDiaz