Ist es möglich, eine Methode der Oberklasse mit einem Parameter zu überschreiben, der den Methodenparameter der Oberklasse erweitert?
Sag ich habe eine Klasse wie folgt:
abstract class Something {}
Und es hat eine Hierarchie mit Klassen, die es erweitern:
class FirstSomething extends Something {}
class SecondSomething extends Something {}
Dann anderswo habe ich eine Klasse, die von diesen Dingen Gebrauch macht:
abstract class A {
public void setSomething(Something something) {
//Process the something
}
}
Kann ich eine Unterklasse von A angeben, sodass diese die Methode setSomething mit den spezifischeren "something" -Klassen überschreibt? Das möchte ich können:
class B extends A {
@Override
public void setSomething(FirstSomething something) {
//Process the something
}
class C extends A {
@Override
public void setSomething(SecondSomething something) {
//Set the something
}
m Moment mache ich so etwas in der A-Klasse:
public void setSomething(Something something) {
checkClass(something,);
//Use the something
}
protected abstract void checkClass(Something something);
Überall dort, wo die Klassen B und C eine Ausnahme in der checkClass-Methode auslösen, wenn der Typ des SuperSomething für diese Klassen nicht geeignet ist.
EDIT: Ich habe es mit den genauen Methodensignaturen wie oben versucht, aber die Unterklassenmethoden überschreiben nicht die Methode des Supers. Ich schätze, ich frage mich wirklich: Gibt es eine Möglichkeit, eine Methode in der Definition der Superklasse anzugeben, wo es diese gibt? eine Prüfung zur Kompilierungszeit für die Objekttypen, die in der setSomething-Methode für Unterklassen der Superklasse zulässig sind?