Есть некая иерархия классов — абстрактный класс и несколько наследников, которые объявлены final.
Код, который это реализует, можно написать с использованием статических вложенных классов, а можно каждый класс-наследник вынести на уровень базового, создав его в в отдельном файле.
Вопрос 1:
Какие достоинства/недостатки есть у подхода, который использует статические вложенные классы (если они есть)?
Вопрос 2:
Какой из подходов является более идиоматическим?
Пример кода, использующего статические вложенные классы.
public abstract class ClientMessage {
ClientMessage() {
}
public static final class Response extends ClientMessage {
public final byte[] payload;
public Response(byte[] payload) {
super();
this.payload = payload;
}
}
public static final class Timeout extends ClientMessage {
public Timeout() {
super();
}
}
public static final class Fault extends ClientMessage {
public final Throwable cause;
public Fault(Throwable cause) {
super();
this.cause = cause;
}
}
}