Java继承。父母有父母名单,孩子必须有孩子名单。怎么样?

den*_*iii 1 java inheritance

我正在努力实现下一个目标:

上级:

public class Animal {
    private List<Animal> relatives;

    public List<Animal> getRelatives() {
        return relatives;
    }

    public void setRelatives(List<Animal> relatives) {
        this.relatives = relatives;
    }
}
Run Code Online (Sandbox Code Playgroud)

儿童:

public class Dog extends Animal {
    private List<Dog> relatives;

    public List<Dog> getRelatives() {
        return relatives;
    }

    public void setRelatives(List<Dog> relatives) {
       this.relatives = relatives;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是由于某种原因,我收到了方法冲突的错误消息。如果不使用泛型类型,继承甚至有可能实现吗?

And*_*lko 7

您实际上不需要重写/复制子类中的任何内容。

class Animal<Relative extends Animal<?>> {
  private List<? extends Relative> relatives;

  public List<? extends Relative> getRelatives() {
    return relatives;
  }

  public void setRelatives(List<? extends Relative> relatives) {
    this.relatives = relatives;
  }
}

class Dog extends Animal<Dog> {}
Run Code Online (Sandbox Code Playgroud)

  • `class狗扩展Animal &lt;String&gt;`似乎合法 (4认同)
  • @Michael好点,我们需要上限“相对” (2认同)
  • @AndyTurner允许将一个List &lt;DomesticDog&gt;传递给setRelatives(DomesticDog扩展了Dog)。 (2认同)