Это может или не может быть ответом на ваше упражнение.Если бы я получил эти требования в реальном мире, я бы их рефакторинг.(Конечно, в реальном мире у меня было бы много вопросов о дальнейших уточнениях и деталях.) Реальная ситуация такова (мы можем предположить), что мы имеем дело с людьми, у которых всегда есть имя и фамилия.Поскольку имена и фамилии не меняются (мы также можем предположить), когда человек специализируется на подклассах, нет никаких оснований предоставлять средства для их реализации по-разному в подклассах.Поэтому нет причин делать абстрактный класс person, поскольку именно поэтому вы создаете абстрактные классы.
Это также ситуация, когда агрегация (один класс "имеет" другие классы) имеет больше смысла, чем наследование (подкласс"это" суперкласс).Поэтому я бы перестроил требования следующим образом:
Лицо: Имя, Фамилия Учащийся: Школа, класс Работник: Зарплата
Класс человека может "иметь" от нуля до одного класса ученика.Класс Person может «иметь» от одного до одного класса Worker.
Существует также смысл, требуя от лица быть абстрактным, что человек должен быть либо учеником, либо работником, либо и тем, и другим.Это может быть задано ограничением or
между двумя классами.
Вот диаграмма:
Класс Person имеетсовокупные отношения как с учениками, так и с рабочими классами.Один класс может иметь от одного до одного ученика.Один класс может также иметь от одного до одного рабочего класса.Ограничение {or}
дополнительно указывает, что должен быть один из них: либо студент, либо работник, либо по одному из каждого.