我有一个父类入口点和一个抽象方法来检索一个属性,它是一个泛型类型的列表。列表被声明为受保护:
public abstract class EntryPoint implements Serializable {
public EntryPoint(){}
protected ArrayList<? extends Tag> tiedTags;
public abstract ArrayList<? extends Tag> getTiedTags();
}
我有一个子类代表snmp入口点(用于查询snmp代理)。intellij并没有抱怨这种配置,但我想知道,我是否正确地重写了父级的gettiedtags()方法,还是以某种方式重写了父级方法?
public class SNMPEntryPoint extends EntryPoint implements Serializable {
//Default Constructor for Serialization
public SNMPEntryPoint(){}
@Override
public ArrayList<SNMPTag> getTiedTags(){ return (ArrayList<SNMPTag>) tiedTags; }
}
2条答案
按热度按时间dgtucam11#
更简洁的方法可能是在类级别引入类型参数
然后通过
这时就不再需要演员了。
bxfogqkk2#
重写的方法不是泛型方法;泛型方法声明自己的类型变量。
中的覆盖
SNMPEntryPoint
是协变覆盖;允许子类重写超类中的方法,以返回比重写方法中的返回类型更具体的类型(原始类型的子类型),例如:自
ArrayList<SNMPTag>
是的子类型ArrayList<? extends Tag>
,您的示例是一个有效的(尽管不常见)协变重写。没有相应的特性来重写参数类型不太具体的方法。