Почему классы Java не имеют абстрактных полей, например, они могут иметь абстрактные методы?Почему не абстрактные поля?
Например: у меня есть два класса, которые расширяют один и тот же абстрактный базовый класс. У этих двух классов есть метод, который идентичен, за исключением константы String, которая, как представляется, является сообщением об ошибке внутри них. Если поля могут быть абстрактными, я мог бы сделать эту константу абстрактной и вывести метод в базовый класс. Вместо этого мне нужно создать абстрактный метод, который в этом случае называется getErrMsg()
, который возвращает String, переопределяет этот метод в двух производных классах, а затем я могу вытащить метод (который теперь вызывает абстрактный метод).
Почему я не могу просто сделать полевым абстрактом для начала? Может ли Java быть спроектирована таким образом?
Похоже, что вы могли бы обойти всю эту проблему, сделав поле непостоянным и просто предоставив значение через конструктор, в результате получив 2 экземпляра одного класса, а не 2 класса. – Nate
Создавая абстрактные поля в суперклассов, вы указываете, что каждый подкласс должен иметь это поле, поэтому это не отличается от не абстрактного поля. –
@peter, я не уверен, что следую вашей точке. если в абстрактном классе была указана не абстрактная константа, то она также является постоянной и во всех подклассах. если он был абстрактным, то его значение должно быть реализовано/предоставлено каждым подклассом. так что это было бы совсем не так. – liltitus27