Хорошо, я понимаю, что это какое-то домашнее задание, поскольку в реальном мире вы вообще не будете использовать для этого наследование.
используя изображение, которое вы разместили, позвольте мне объяснитьНаследование в самых простых терминах, которые я могу.
Вы можете думать о базовом классе для всех рептилий - давайте назовем его Reptile
.
Этот класс содержит все различные аспекты, общие для всех рептилий - такие вещи, как предпочтительныееда, время кормления, отношение пищи к весу и т. д.
Все эти аспекты могут быть закодированы как свойства класса Reptile
.
Обратите внимание, что в реальном мире Species
иReptileType
также будет свойствами класса Reptile
, что делает использование наследования полностью избыточным в этом случае - но опять же, мы еще не говорим о реальных приложениях - так:
A Snake
это определенный тип Reptile
.Lizard
- это еще один конкретный тип Reptile
- поэтому давайте создадим классы для этих двух типов.Пока что у нас есть классы Reptile
, Snake
и Lizard
, где последние два наследуют первый.
Если двигаться дальше, Cobra
- это определенный тип Snake
, поэтому Rattlesnake
.Итак, давайте создадим для них классы, наследуемые от Snake
.Во многом то же самое, BeardedLizard
- это определенный тип Lizard
, как и Chameleon
- так что вот еще два класса, которые нужно создать.
Итак, я думаю, что ваш учитель ожидаетсм. следующее:
class Reptile {/* implementation here */}
class Snake : Reptile {/* implementation here */}
class Cobra : Snake {/* implementation here */}
class Rattlesnake: Snake {/* implementation here */}
class Lizard: Reptile {/* implementation here */}
class BeardedLizard : Lizard {/* implementation here */}
class Chameleon : Lizard {/* implementation here */}
Теперь, причина наследования не имеет смысла в этой ситуации, заключается в том, что Snake
не добавляет никаких новых возможностей к Reptile
, а также Chameleon
до Lizard
.Чтобы наследование имело смысл, вам необходимо добавить новые возможности в производные типы, которые являются специфическими для этого класса (и его наследников) и не используются совместно с базовым классом или какой-либо другой цепочкой наследования этого класса.
Например, все змеи ползают, а все ящерицы ходят.Если вы добавляете метод Crawl()
к классу Snake
и метод Walk()
к классу Lizard
, то это будет иметь смысл для классов Snake
и Lizard
, наследующих Reptile
класс.