Проблемы понимания наследования и реализации его в классах - PullRequest
0 голосов
/ 22 октября 2018

У меня проблемы с пониманием наследования и его реализацией в классах.Я пытаюсь создать программу с классом Reptile в качестве основы.

Каков наилучший способ сделать это со следующими данными?

Также будет класс меню, использующий то, что я думаюдолжен быть случай переключения, чтобы выбрать нужную рептилию и отобразить информацию.

Заранее благодарен за любую помощь.

enter image description here

1 Ответ

0 голосов
/ 22 октября 2018

Хорошо, я понимаю, что это какое-то домашнее задание, поскольку в реальном мире вы вообще не будете использовать для этого наследование.

используя изображение, которое вы разместили, позвольте мне объяснитьНаследование в самых простых терминах, которые я могу.

Вы можете думать о базовом классе для всех рептилий - давайте назовем его 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класс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...