Абстрактные классы
Изучаю полиморфизм - способность класса-родителя использовать функции, классов-потомков, даже если неизвестно реализованы функции-потомков или нет.
Вот написал элементарный код, без реализации, выдаёт ошибку: abstract class Db{ abstract function db_conn(); abstract function db_open(); abstract function db_query(); abstract function db_close(); } class B extends Db{ function db_conn() {}; function db_open() {}; function db_query() {}; function db_close() {}; } $o1 = new B; Цитата:
вызывают функцию из производного класса, но интерпретатор тоже ругается. <?php class A { // Выводит, функция какого класса была вызвана function Test() { echo "Test from A\n"; } // Тестовая функция — просто переадресует на Test() function Call() { Test(); } } class B extends A { // Функция Test() для класса B function Test() { echo "Test from B\n"; } } $a=new A(); $b=new B(); $a->Call(); // выводит "Test from A" $b->Test(); // выводит "Test from B" $b->Call(); // Внимание! Выводит "Test from B"! ?> Цитата:
|
Тебе перевести сообщения на русский?
|
Всё, исправил.
Да, точно, меня интересует пример №1. Скажите, какой же здесь полиморфизм, как говорится в книге, что мол в методе класса-родителя вызывается метод класса потомка, но объект же создаётся класса-потомка всё-таки. Вот, смотрите: $a->Call(); // выводит "Test from A" |объект создался от класса А, значит и функц. класса А вызывается $b->Test(); // выводит "Test from B" |объект создался от класса B, значит и функц. класса B вызывается $b->Call(); // Внимание! Выводит "Test from B"! |Так здесь наоборот вызывается метод из класса-родителя в классе-потомке, а не в классе-родителя вызывается метод потомка Если полиморфирзм - это когда метод в классе-родителе вызывает метод класса-потомка, я не вижу чтоб здесь в классе-родите вызывался метод-класса-потомка, объект всё равно же создаётся от потомка, а не от родителя. |
|
Часовой пояс GMT +3, время: 19:22. |