Выбор интерфейса вместо абстрактного класса всегда хорош, поскольку он позволяет extension
вашего приложения.
До Java-8 абстрактные классы были способом предоставления общих частичных реализаций, так как раньше интерфейсы java-8 не могли иметь определения методов.
В Java-8 интерфейсыесть методы по умолчанию, которые допускают общие определения определений.
Следовательно, я рекомендую использовать здесь интерфейс и предоставлять методы по умолчанию. И если вам нужно предоставить какую-то дополнительную реализацию, выходящую за рамки контракта, вы всегда можете выбрать абстрактные или конкретные значения.
В вашем случае любое представление сущности должно быть поддержано интерфейсом.
Итак, ваша диаграмма выглядит примерно так:
interface Entity extends cloneable{
//...
}
interface Enemy extends Entity{
//...
}
interface User extends Entity, Serializable{
//...
}
class Player implements User {
//...
}
class Dragon implements Enemy{
//...
}