Disons que j'ai cette classe de base:Pourquoi les classes dérivées n'ont-elles parfois que des types spécialisés dans les méthodes surchargées?
abstract public class Base {
abstract public Map save();
abstract public void load(Map data);
}
à ma grande surprise que je pouvais faire cela dans une classe dérivée:
public class Derived extends Base {
@Override
public Map<String, String> save() { //Works
...
}
...
}
mais je ne pouvais pas le faire:
public class Derived extends Base {
@Override
public void load(Map<String, String> data) { // Fails
...
}
...
}
Que se passe-t-il ici? Pourquoi puis-je utiliser un type de retour spécialisé, mais pas un type de paramètre spécialisé?
Ce qui est encore plus déroutant est que si je continue la déclaration initiale de load
, je peux attribuer au type plus spécial:
public class Derived extends Base {
@Override
public void load(Map data) {
Map<String, String> myData = data; // Works without further casting
...
}
...
}
Downvoters ... écrire des commentaires –