java - 继承 - 重写变异方法?

标签 java inheritance overriding

那么,假设我有以下类(class):

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)。我该怎么办?我是否让这变得过于复杂?有没有更好的设计方法?

最佳答案

这是不正确的,因为您使子类比父类(super class)更具限制性:父类(super class)可以设置任何类型的 FooKey,但子类只接受 BarKey。

为了做到这一点,您需要使父类(super class)通用:

abstract class Foo<K extends FooKey> {
    private K key;

    public void setKey(K key){
        this.key = key;
    }
}

final class Bar extends Foo<BarKey> {
}

关于java - 继承 - 重写变异方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8386297/

相关文章:

java - 链接 JComboBox 和 JTable

Objective-C 检测类是否覆盖了继承的方法

generics - scala 中参数化方法的类型覆盖

java - 调用父类(super class)方法而不是子类方法

java - Kafka Streams 应用程序无休止的再平衡

java - 如何循环多维数组而不出现越界错误

java - UTF-8 和 ISO 8859-1 之间的转换 :

c++ - Visual Studio 2005 c++ 继承错误的解决方法

c# - 继承和异常处理

java - Xml 架构接口(interface)