【发布时间】:2019-09-05 15:09:04
【问题描述】:
我正在努力实现下一个:
家长:
public class Animal {
private List<Animal> relatives;
public List<Animal> getRelatives() {
return relatives;
}
public void setRelatives(List<Animal> relatives) {
this.relatives = relatives;
}
}
孩子:
public class Dog extends Animal {
private List<Dog> relatives;
public List<Dog> getRelatives() {
return relatives;
}
public void setRelatives(List<Dog> relatives) {
this.relatives = relatives;
}
}
但由于某种原因,我收到方法冲突的错误。这甚至可以通过继承而不使用泛型类型吗?
【问题讨论】:
-
这种设计违反了里氏替换原则。
Animal.getRelatives()应该返回一个List<Animal>,所以根据 Liskov 替换原则,dog.getRelatives().add(new Cat())一定可以。
标签: java inheritance