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?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage