因此,假设我有以下课程:
oo
abstract class Foo{
.
.
.
public void setKey(FooKey key){
this.key = key;
}
}
酒吧
final class Bar extends Foo{
.
.
.
@Override
public void setKey(BarKey key){ // Can't do this?
super.setKey(key);
}
}
在上面的示例中,
BarKey
是FooKey
的子类。在这里,我要确保为Bar
设置的键是FooKey
的特定子类(即BarKey
)。我该怎么办?我会让这个变得过于复杂吗?有没有更好的设计方法? 最佳答案
这是不正确的,因为您使子类比父类更具限制性:父类可以设置任何类型的FooKey,但是子类仅接受BarKey。
为此,您需要使超类通用:
abstract class Foo<K extends FooKey> {
private K key;
public void setKey(K key){
this.key = key;
}
}
final class Bar extends Foo<BarKey> {
}