Я знаю, что абстрактные поля не существуют в Java. Я также прочитал этот вопрос , но предложенные решения не решат мою проблему. Может быть, нет решения, но стоит спросить:)
Проблема
У меня есть абстрактный класс, который выполняет операцию в конструкторе в зависимости от значения одного из его полей.
Проблема в том, что значение этого поля будет меняться в зависимости от подкласса .
Как сделать так, чтобы операция выполнялась со значением поля, переопределенным подклассом?
Если я просто "переопределил" поле в подклассе, операция будет выполнена со значением поля в абстрактном классе.
Я открыт для любого решения, которое гарантировало бы, что операция будет выполнена во время создания экземпляра подкласса (т.е. помещение операции в метод, вызываемый каждым подклассом в конструкторе, недопустимо решение, потому что кто-то может расширить абстрактный класс и забыть вызвать метод).
Кроме того, я не хочу указывать значение поля в качестве аргумента конструктора.
Есть ли какое-то решение для этого, или я должен просто изменить свой дизайн?
Edit:
Мои подклассы на самом деле являются инструментами, используемыми моей основной программой, поэтому конструктор должен быть открытым и принимать в точности те аргументы, с которыми они будут вызываться:
tools[0]=new Hand(this);
tools[1]=new Pencil(this);
tools[2]=new AddObject(this);
(подклассами являются Hand, Pencil и AddObject, которые расширяют абстрактный класс Tool)
Вот почему я не хочу менять конструктор.
Решение, которое я собираюсь использовать, состоит в том, чтобы немного изменить код выше:
tools[0]=new Hand(this);
tools[0].init();
tools[1]=new Pencil(this);
tools[1].init();
tools[2]=new AddObject(this);
tools[2].init();
и используйте абстрактный метод получения доступа к полю.