【问题标题】:Java Generic inheritanceJava 泛型继承
【发布时间】:2020-04-01 20:36:04
【问题描述】:

我正在尝试实现一些以具有通用变量的父级开头的代码,然后子级继承它。

public class Parent <A>{
private A a;

public Parent (A a){
    this.a=a;
    }
} 

public class Child <A> extends Parent<A>{

private A a;

public Child (A a){
    this.a=a;
    }
}

我收到一个编译错误说明

constructor Parent in class Parent&lt;A&gt; cannot be applied to given types; A

【问题讨论】:

  • 拥有两个都称为a 的字段会变得非常混乱,即使没有代码可以访问它们。我建议给 a 的子类版本一个不同的名称。

标签: java generics inheritance compiler-errors


【解决方案1】:

你需要从子构造器中显式调用父构造器:

public class Child <A> extends Parent<A> {
    public Child (A a) {
        super(a);
    }
}

【讨论】:

  • 并且不需要在子类中添加字段a。它是遗传的。
  • @akuzminykh 如果Child 使用a,那么它将需要它。通常,您希望避免继承。这种事情表明设计已经关闭。
  • @TomHawtin-tackline 不,当它需要它时,你不需要再次声明它。您是否介意添加一个参考来解释 “通常您希望避免继承。” 和 “这种事情表明设计已关闭。” ?我很好奇,想研究一下。
  • 谢谢,我试过做 super();显然那是行不通的。谢谢你的回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-06
  • 1970-01-01
  • 2021-10-11
  • 2011-04-25
  • 1970-01-01
  • 2011-04-11
相关资源
最近更新 更多