Мне сложно понять ваш вопрос. Я постараюсь обобщить вашу формулировку проблемы, пожалуйста, прокомментируйте, если это действительно ваш вопрос.
(Я бы поставил это как комментарий, но количество символов превышает 600)
У вас есть классы
ImageA
и
ImageB
, которые являются подклассами
Image
Конструктор для обоих этих классов одинаков и принимает аргумент пути
(я предполагаю, что это путь к файлу изображения)
Классы
ImageA
и
ImageB
используют различные атрибуты для представления изображения
Общие атрибуты классов
ImageA
и
ImageB
хранятся в базовом классе (как атрибут пути)
Вы объявляете абстрактный метод
compare
, который принимает тип
Image
в качестве аргумента, и
возвращает двойное значение
Цель состоит в том, чтобы передать метод сравнения
ImageA
типа
ImageB
, и возвращаемое значение будет указывать, какое конкретное представление изображения лучше. Таким образом, это будет означать, что реализация метода
compare
должна быть такой, что метод
compare
в классе
ImageA
будет вызываться с экземпляром типа
ImageB
, а наоборот будет реализация в классе
ImageB
Метод сравнения в классах
ImageA
и
ImageB
не может использовать методы в
Image
, поскольку они имеют разные атрибуты
Если это постановка проблемы действительно представляет вашу проблему, то я думаю, что не прибегая к проверкам типа instanceof
и приведению не будет возможности провести сравнение между классами ImageA
и ImageB
. Хотя существует абстрактный класс Image
, метод compare
все еще зависит от того, какие атрибуты изображения (которые не совпадают) используются дочерними классами для представления изображения.