Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 27.07.2011, 00:29
Аспирант
Отправить личное сообщение для romantik2011 Посмотреть профиль Найти все сообщения от romantik2011
 
Регистрация: 20.07.2011
Сообщений: 50

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

Вот написал элементарный код, без реализации, выдаёт ошибку:
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;

Цитата:
Parse error: syntax error, unexpected ';', expecting T_FUNCTION in C:\www\htdocs\test.ru\www\index.php on line 11
Дальше, пробую по примеру в книге вот этот код, который в классе-родителе
вызывают функцию из производного класса, но интерпретатор тоже ругается.

<?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"!

?>

Цитата:
Fatal error: Call to undefined function Test() in C:\www\htdocs\test.ru\www\index.php on line 7
Ответить с цитированием
  #2 (permalink)  
Старый 27.07.2011, 00:33
Профессор
Отправить личное сообщение для ваый Посмотреть профиль Найти все сообщения от ваый
 
Регистрация: 29.06.2011
Сообщений: 445

Тебе перевести сообщения на русский?
Ответить с цитированием
  #3 (permalink)  
Старый 27.07.2011, 00:51
Аспирант
Отправить личное сообщение для romantik2011 Посмотреть профиль Найти все сообщения от romantik2011
 
Регистрация: 20.07.2011
Сообщений: 50

Всё, исправил.
Да, точно, меня интересует пример №1.
Скажите, какой же здесь полиморфизм, как говорится в книге, что мол в методе класса-родителя вызывается метод класса потомка, но объект же создаётся класса-потомка всё-таки.
Вот, смотрите:
$a->Call(); // выводит "Test from A"  |объект создался от класса А, значит и функц. класса А вызывается
$b->Test(); // выводит "Test from B"  |объект создался от класса B, значит и функц. класса B вызывается
$b->Call(); // Внимание! Выводит "Test from B"!  |Так здесь наоборот вызывается метод из класса-родителя в классе-потомке, а не в классе-родителя вызывается метод потомка


Если полиморфирзм - это когда метод в классе-родителе вызывает метод класса-потомка, я не вижу чтоб здесь в классе-родите вызывался метод-класса-потомка, объект всё равно же создаётся от потомка, а не от родителя.
Ответить с цитированием
  #4 (permalink)  
Старый 27.07.2011, 10:28
Профессор
Отправить личное сообщение для tenshi Посмотреть профиль Найти все сообщения от tenshi
 
Регистрация: 20.03.2008
Сообщений: 1,183

http://ru.wikipedia.org/wiki/%D0%9F%...BD%D0%B8%D0%B5)
__________________
.ня
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Javascript - классы, они есть или их нету в Javascript? Golovastik Javascript под браузер 39 15.02.2013 10:38
Как идентифицировать..как использовать эти классы для двух.. sashajs (X)HTML/CSS 2 11.05.2011 10:11
Несколько вопросов касательно JavaScript(замыкания, классы..) r1der Общие вопросы Javascript 6 13.11.2010 02:51
Преднастроенные классы drea_master ExtJS 1 24.03.2010 01:54
Сдвоиные классы greatilya (X)HTML/CSS 2 26.05.2009 11:28