Можно ли инициализировать последний член абстрактного базового класса с помощью абстрактного метода? ⇐ JAVA
-
Гость
Можно ли инициализировать последний член абстрактного базового класса с помощью абстрактного метода?
Интересно, могу ли я инициализировать последнее поле в абстрактном базовом классе результатом абстрактного метода, который будет реализован производным классом. Я понимаю, что производный ctor сначала вызовет базовый ctor, поэтому я гарантирую, что реализация абстрактного метода также будет зависеть только от конечных полей производного класса, определенных при объявлении. Я пробую следующий код, и он работает.
абстрактный класс Base { защищенное окончательное имя строки = callName(); защищенная абстрактная строка callName(); } публичный финальный класс Foo расширяет Base { частный окончательный идентификатор строки = «42»; @Override защищенная строка callName() { return String.format("WithId%s", id); } публичный недействительный дисплей () { System.out.printf("имя: %s\n", name); System.out.printf("id: %s\n", id); } public static void main(String[] args) { вар foo = новый Foo(); Фу.дисплей(); } } Так это законное действие в Java или это очень плохая идея?
Интересно, могу ли я инициализировать последнее поле в абстрактном базовом классе результатом абстрактного метода, который будет реализован производным классом. Я понимаю, что производный ctor сначала вызовет базовый ctor, поэтому я гарантирую, что реализация абстрактного метода также будет зависеть только от конечных полей производного класса, определенных при объявлении. Я пробую следующий код, и он работает.
абстрактный класс Base { защищенное окончательное имя строки = callName(); защищенная абстрактная строка callName(); } публичный финальный класс Foo расширяет Base { частный окончательный идентификатор строки = «42»; @Override защищенная строка callName() { return String.format("WithId%s", id); } публичный недействительный дисплей () { System.out.printf("имя: %s\n", name); System.out.printf("id: %s\n", id); } public static void main(String[] args) { вар foo = новый Foo(); Фу.дисплей(); } } Так это законное действие в Java или это очень плохая идея?
Мобильная версия