Основы наследования - PullRequest
2 голосов
/ 20 июля 2011
class Base
{

}

class Derive:Base
{

}

Base b=new Derive();

Приведенный выше код работает, но почему мы можем создать объект производного класса и назначить его для ссылки на базовый класс.Кроме того, объектная переменная 'b' будет иметь доступ ко всем не закрытым переменным и методам Class Base, даже если она ссылается на Derive Class.Что делает это возможным, почему объектная переменная 'b', которая ссылается на Derive Object, может обращаться к базовому классу, а не к классу Derive.

Ответы [ 2 ]

3 голосов
/ 20 июля 2011

Теория, позволяющая работать с вышеуказанным кодом, называется принципом замены : когда Derived является подтипом Base, это формирует отношение "есть",Принцип подстановки постулирует, что там, где ожидается экземпляр Base, его можно заменить экземпляром Derived.

. Причина, по которой вы не сможете получить доступ к свойствам и методам класса Derive позжев том, что (по крайней мере, для компьютера) нет никаких указаний на то, что переменная типа Base содержит экземпляр типа Derive, который позволил бы получить доступ к этим свойствам / методам.Если вы возьмете другой класс DerivedToo : Base, у которого есть другие методы, отличные от Derive, вы быстро увидите, как программа может сломаться, если предположить, что переменная Base содержит экземпляр Derive.

1 голос
/ 20 июля 2011

Я думаю, что это вопрос полиморфизма, а не наследования.

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

Полиморфизм позволяет вам вызывать методы производного класса через ссылку на базовый класс во время выполнения. Это удобно, когда вам нужно назначить группу объектов массиву, а затем вызвать каждый из их методов. Они не обязательно должны быть одного типа объекта. Однако, если они связаны наследованием, вы можете добавить их в массив как унаследованный тип.

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