Можно ли переопределить метод суперкласса с помощью параметра, расширяющего параметр метода суперкласса?
Скажем, у меня есть такой класс:
abstract class Something {}
И у этого есть иерархия с классами, расширяющими это:
class FirstSomething extends Something {}
class SecondSomething extends Something {}
Тогда в другом месте у меня есть класс, использующий эти вещи:
abstract class A {
public void setSomething(Something something) {
//Process the something
}
}
Могу ли я указать подкласс A, чтобы он переопределял метод setSomething более конкретными классами «что-то»? Вот что я хочу сделать:
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
}
На данный момент я делаю что-то вроде этого в классе А:
public void setSomething(Something something) {
checkClass(something,);
//Use the something
}
protected abstract void checkClass(Something something);
где класс B и класс C выдают исключение в методе checkClass, если тип SuperSomething не является правильным для этих классов.
РЕДАКТИРОВАТЬ: я пытался с точными сигнатурами метода, как указано выше, но методы подкласса не переопределяют метод супер, я предполагаю, что я действительно спрашиваю: есть ли способ указать метод в определении суперкласса, где есть проверка во время компиляции для типов объектов, допустимых в методе setSomething для подклассов суперкласса?