因此,假设我有以下课程:

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);
    }
}


在上面的示例中,BarKeyFooKey的子类。在这里,我要确保为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> {
}

10-06 00:37