Ответ 1
В дизайне вы хотите, чтобы базовый класс class A
представлял только интерфейс для своих производных классов. Это означает, что вы не хотите, чтобы кто-либо фактически создавал экземпляр объекта базового класса. Вы только хотите поднять его (неявное повышение, которое дает вам полиморфное поведение), чтобы его интерфейс можно было использовать. Это достигается путем создания абстрактного класса с использованием абстрактного ключевого слова. В другой руке вы хотите использовать только часть функциональных возможностей class A
, чтобы создать class B
(как дочерний) значение уменьшить зависимости связи или реализации между системами и предотвратить дубликаты.
Но помните, когда вы определяете внутренний класс, код без внутренних классов более удобен и читабель. Когда вы получаете доступ к частным данным из внешнего класса, JDK-компилятор создает функции доступа к пакету доступа во внешнем классе, чтобы внутренний класс мог получить доступ к закрытым членам. Это оставляет дыру в безопасности. В общем, следует избегать использования внутренних классов. Использовать внутренний класс только в том случае, если внутренний класс применим только в контексте внешнего класса и/или внутреннего класса, он может быть закрытым, чтобы доступ к нему мог получить только внешний класс. Внутренние классы используются в основном для реализации вспомогательных классов, таких как Iterators, Comparators и т.д., которые используются в контексте внешнего класса. О abstract class
он должен быть абстрактным для помощников, предположим, что ваши помощники должны быть слишком сложны, чтобы писать абстрактную форму для них.
В вашем случае я не помню широкого использования вложенных абстрактных классов, возможно, в мире Swing
.