у меня
interface FooI
class FooA implements FooI
class FooB implements FooI
class FooC implements FooI
Я написал класс "Обработчик", который имеет следующие методы
static double handle(FooA f)
static double handle(FooB f)
static double handle(FooI f)
и у меня есть такая функция:
void caller(FooI f)
{
Handler.handle(f);
}
с f просто известен как класс, реализующий FooI. Однако f является экземпляром FooA
Вместо вызова метода для FooA вызывается метод для FooI.
Когда я использую f.getClass (). GetName (), я получаю правильное имя класса (FooA).
Я запутался, потому что ожидал, что будет вызван наиболее подходящий метод, а именно метод для FooA.
Я хотел использовать метод FooI в качестве запасного варианта для обработки классов, которые могут быть реализованы позже, и я также хочу обрабатывать f, не имея одной большой функции, в которой я выполняю instanceof проверки всех известных на данный момент классы, реализующие мой интерфейс.
Что было бы хорошим подходом для этого?