У меня есть абстрактный класс A, который определяет абстрактные методы. Это означает, что для того, чтобы класс был неустойчивым, весь абстрактный метод должен быть реализован.
Я хотел бы, чтобы все мои подклассы реализовали конструктор с 2 ints в качестве параметров.
Объявление конструктора поражает мою цель, поскольку я хочу, чтобы конструктор был определен в подклассах, и я ничего не знаю о реализации. Более того, я не могу объявить конструктор абстрактным,
Есть ли способ сделать это?
Пример того, что я хочу:
Позволяет сказать, что я определяю API класса Matrix. В моей проблеме Matrix не может изменить свои размеры.
Чтобы создать матрицу, мне нужно указать ее размер.
Следовательно, я хочу, чтобы все мои разработчики предоставили конструктору размер в качестве параметра. Этот конструктор мотивирован проблемой, а не проблемой реализации. Реализация может делать все, что захочет, при условии, что сохраняется вся семантика методов.
Скажем, я хочу предоставить базовую реализацию метода invert()
в моем абстрактном классе. Этот метод создаст новую матрицу с инвертированными размерами this
. Более конкретно, поскольку он определен в абстрактном классе, он создаст новый экземпляр того же класса, что и this
, используя конструктор, который принимает два ints. Поскольку он не знает экземпляр, он будет использовать рефлексию (getDefinedConstructor), и я хочу, чтобы способ гарантировать, что я получу его и что это будет иметь смысл для реализации.