Должен ли я создавать методы получения и установки внутри абстрактного класса?
Да, если метод является общим для большинства ожидаемых реализаций абстрактного класса, то прекрасно реализовать эти методы в абстрактном классе.Если действительно хорошо иметь геттеры и сеттеры для свойств вашего Human
, трудно сказать.То, как вы в настоящее время используете его, не имеет особого смысла, поскольку вы смешиваете аспекты поведения (viewIndividual) с аспектами данных (методы получения и установки) в одном классе.Учитывая приведенный выше код, вы будете в порядке с защищенными членами в абстрактном классе и потенциально с установщиками, чтобы избежать дублирования кода в реализациях.Но если вы хотите использовать ваши объекты в качестве Java-бинов, это нормально.
Разве это хорошая практика - иметь разное разнообразие методов внутри абстрактного класса?
Выподразумеваете как абстрактные, так и неабстрактные методы?Да, это довольно стандартно.Возьмем следующий пример:
public abstract class Example {
public final void publicMethod() {
// do some preparations
internalMethod();
// do some cleanup
}
protected abstract void internalMethod();
}
Потребители реализаций Example
смогут получить доступ только к publicMethod
, и гарантируется, что все необходимые подготовительные и очистительные задачи выполняются без повторения этого кода снова и снова.в реализациях Example
необходимо переопределить только internalMethod
.
Должен ли я переопределять эти методы внутри класса Individual?
Нет, определенно нет.По крайней мере, до тех пор, пока вы не добавите дополнительную функциональность к методам, абстрактные методы не должны быть переопределены только для реализации их внутри экземпляра класса.
В общем, вы должны быть осторожны с наследованием, поскольку код имеет тенденцию становитьсяочень трудно понять, если вы реализуете что-то в глубокой иерархии типов.ИМХО иерархии начинают становиться трудными для использования с уровнем иерархии 4-5, но это, вероятно, в значительной степени основано на мнении.Существует правило предпочитать композицию наследованию, чтобы избежать чрезмерного использования наследования для простых служебных вещей.