假设我有这个基类:
abstract public class Base {
abstract public Map save();
abstract public void load(Map data);
}
令我惊讶的是,我可以在派生类中做到这一点:
public class Derived extends Base {
@Override
public Map<String, String> save() { //Works
...
}
...
}
但我不能这样做:
public class Derived extends Base {
@Override
public void load(Map<String, String> data) { // Fails
...
}
...
}
这里发生了什么?为什么我可以使用专门的返回类型而不是专门的参数类型?
更令人困惑的是,如果我保留 的原始声明load
,我可以将其分配给更特殊的类型:
public class Derived extends Base {
@Override
public void load(Map data) {
Map<String, String> myData = data; // Works without further casting
...
}
...
}