Абстрактные классы
Изучаю полиморфизм - способность класса-родителя использовать функции, классов-потомков, даже если неизвестно реализованы функции-потомков или нет.
Вот написал элементарный код, без реализации, выдаёт ошибку:
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, время: 01:11. |