Прежде всего, довольно новый в java, извините, если это простой вопрос.Абстрактный класс возврата в интерфейсе
Я реализовал абстрактный класс и два класса, которые его расширяют.
public abstract class Lado{
//body
}
и две другие классы с этой формой, например
public class Arista extends Lado
{ //body
}
так, никакой проблемы, теперь я не иметь интерфейс, определенный как это.
public interface Grafo
{ //body
public List<Lado> lados();
//more body
}
имеет вы видите интерфейс возвращает список класса Ладо, но в моей реализации я должен возвращать список класса Arista или второго класса (по другой реализации интерфейса)
в кодовая база, что я должен использовать для реализации интерфейса имеет реализацию ЛАДОСА(), как этот
public List<Lado> lados() {
return 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
Я не могу показаться, чтобы найти, как это исправить без изменения базового кода, который был дан мне (и Я не могу изменить его). Я знаю, что я не могу создать экземпляр абстрактного объекта класса, а реализация абстрактного класса имеет значения и функции, которые нет в абстрактном классе.
Также я не могу использовать переопределение по той же причине, что я не могу изменить свои подписи функций в своих реализациях.
Буду признателен за вашу помощь, спасибо.
Если что-то читает странно, пожалуйста, дайте мне знать.
-------------------- EDIT --------- Lado абстрактного класса.
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();
}
Arista подкласс
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>
если у попытаться сделать getExtremo1()
это doenst найти символ на компиляции (нет несуществующие на классе Ладо), пытался бросить список вывода как List<Arista>
, но он тоже не работал правильно.
решение заключается в том, чтобы изменить тип возврата в интерфейсе 'Grafo' как' List расширяет Lado> '. Однако, если вы не можете изменить это, вы застряли. –
Q: Какой из ваших классов на самом деле * реализует * Grafo? – FoggyDay
@FoggyDay класс реализован в классе GrafoDirigido, а другой называется Digrafo, эта работа работает на 90%. Мне просто нужно, чтобы функция lados() работала правильно. pbabcdefp Да, это работает, к сожалению, я не могу изменить базовую подпись функции, которая была предоставлена мне. Спасибо. – AlejandroDiaz