Есть ли основания для расширения класса с помощью абстрактного класса, а также для реализации интерфейса?
В большинстве случаев это похоже на хак, а не на solid выбор дизайна.
Например, у меня есть класс настроек, например:
public abstract class exampleAbstractSettings {
private String ID = "ID-";
private String channel;
private HashMap<String, String> channelToKeyMap;
private String address;
}
Реализация интерфейса, подобного следующему:
public interface exampleSettingsInterface {
String getType();
}
В классе, как:
public class exampleSettings extends exampleAbstractSettings implements exampleSettingsInterface {
private boolean enabled = false;
private int dataRate = 102000;
private String type = SERIAL;
private String address = "ttyAMA0";
}
Это просто хак, чтобы добавить новое поле, не испортив JSON objectMapper. Для этого вы можете использовать аннотацию @JsonIgnore.
Затем интерфейс использовался так:
(exampleSettingsInterface)objectOfExampleAbstractSettings.getType()