@vrazbros

Почему в данном PHP коде не наследутся public метод?

Разбираюсь с ООП наткнулся на такой код вроде просто но не могу понять
<?php
abstract class base {
    public function inherited() {
        $this->overridden();
    }
    private function overridden() {
        echo 'base';
    }
}

class child extends base {
    private function overridden() {
        echo 'child';
    }
}

$test = new child();
$test->inherited();
?>

Output will be "base".


не могу понять почему base выводит ? Дочерний класс ведь унаследовал паблик метод inherited значит он должен был вызывать приватный метод overridden из класса child и вывести child
  • Вопрос задан
  • 130 просмотров
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Наследуется - не значит "копируется". Просто при вызове $test->inherited() в классе child функция не будет найдена и будет попытка вызова функции из родительского класса base.
Ну а класс base, как уже написал Лентюй, не видит overriden() из child, поскольку она приватная.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
BojackHorseman
@BojackHorseman Куратор тега PHP
...в творческом отпуске...
наследуется.

а вызывается не тот метод, который вы ожидаете потому, что в контексте base ничего неизвестно про child::overridden(), ибо он приватный. если вы уберете декларацию base::overridden(), будет ошибка.
Ответ написан
@AlexSer
Она у тебя приватная, может вызываться только внутри своего класса!
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Bitrix Калининград
от 180 000 до 250 000 ₽
РыбачОК Санкт-Петербург
от 100 000 ₽
Reliable systems Астрахань
от 150 000 до 250 000 ₽