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