Должен ли родительский вызов функции вызывать родителя родителя, если у родителя нет такого метода? - PullRequest
0 голосов
/ 17 апреля 2011

В академических целях мне интересно, должен ли вызов родительского метода приводить к вызову родительского метода родителя в случае, если у родителя нет такого метода?

Например (псевдокод):

class A {
    function doSomething() {
    }
}

class B extends A {}

class C extends B {
    function doSomething() {
        parent::doSomething();
    }
}

i = new C();
i->doSomething();

Означает ли родительский вызов в объектно-ориентированных языках, что если родительский метод отсутствует, его родительский метод будет вызываться вместо него?

Ответы [ 3 ]

1 голос
/ 17 апреля 2011

Семантика parent-child «расширяет» / одиночное наследование строго подразумевает, что «везде, где вы можете использовать родителя, вы также можете использовать дочерний элемент».

То есть функции дочернего элемента должны бытьнадмножество родительского.

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

Конечно, может бытьдругие вещи в работе, например, язык может поддерживать интерфейсы, проектирование по контракту и т. д. - в этом случае родительский метод может быть заглушкой или абстрактным невостребованным методом, или может действовать политика «кто знает, что».

примечание: в других ответах доклад о public-vs-private действительно специфичен для Java-подобных языков, а не (как подразумевают теги вопроса) общего ООП.Если вы не рассматриваете видимость как часть общего ООП (язык Python может возразить).

1 голос
/ 17 апреля 2011

Если область действия DoSomething, как определено в A, является Public, то DoSomething также является частью интерфейса public Public.Поэтому метод DoSomething также будет частью открытого интерфейса Си.Поскольку исходный метод, определенный в A, наследуется производными классами, родительский метод будет вызываться производными классами, если только он не переопределен.

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

1 голос
/ 17 апреля 2011

В ООП на этот вопрос обычно отвечает видимость функции doSomething.

Если она была защищена или общедоступна в классе A, то да , это будетвызывается, если оно не переопределено в B

(здесь я также предполагаю, что ключевое слово extends является публичным наследованием. Для получения дополнительной информации см. http://www.learncpp.com/cpp-tutorial/115-inheritance-and-access-specifiers/.)

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