Ваш вопрос показывает, что вы не знаете, как работает полиморфизм. Когда у вас есть ссылка на базовый класс, будь то абстрактный или конкретный, любой метод, вызванный по этой ссылке, будет динамически определять метод, который будет вызываться во время выполнения, на основе фактического объекта. Этот процесс называется динамическим связыванием. Лучше всего, если я покажу простой пример:
public class Shape {
public void draw() {
System.out.println("Draw a Shape");
}
}
public class Triangle extends Shape {
public void draw() {
System.out.println("Draw a Triangle");
}
}
public class Square extends Shape {
public void draw() {
System.out.println("Draw a Square");
}
}
Итак, этот код:
public static void main( String[] args ) {
Shape shape = new Triangle();
shape.draw(); // prints Draw a Triangle
shape = new Square();
shape.draw(); // prints Draw a Square
shape = new Shape();
shape.draw(); // prints Draw a Shape
}
Видите, как тип переменной формы не определяет, какой метод вызывается? Когда мы меняем форму объекта, мы можем изменить вызываемый метод. Тип фигуры определяет только интерфейс, который вы можете использовать для вызова методов. Но фактический тип ссылки, на которую он указывает, определяет, какой метод вызывается.
Так что это длинный ответ на вопрос, почему вам не нужно использовать отражение для вызова этого метода в абстрактном классе. Просто используйте полиморфизм, и он вызовет правильный метод «волшебным образом».