Можно ли переопределить метод суперкласса с помощью параметра, расширяющего параметр метода суперкласса?

Скажем, у меня есть такой класс:

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 для подклассов суперкласса?

Ответы на вопрос(1)

Ваш ответ на вопрос