![]() |
|
Модераторы: ginnie, korob2001 |
![]()
|
|
| Vaneska |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 141 Регистрация: 15.3.2005 Где: Москва Репутация: нет Всего: 4 |
Приветствую.
Разбираюсь тут со всеми хитростями ООП. Возник вопрос:
Можно ли делать делать двойное наследование, если предок один? Я вроде так сделал, никаких проблем вроде не было. Но всетаки есть сомнения. Ведь получается класс FirstSecond наследует один и тот же метод new 2 раза. Это сообщение отредактировал(а) Vaneska - 19.10.2005, 23:31 --------------------
http://isokolov.blogspot.com/ |
|||
|
||||
| sharq |
|
|||
![]() Perl Liker ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 13.12.2004 Где: Ростов-на-Дону Репутация: 3 Всего: 28 |
Он не наследывает два раза, просто new перекрывается.
-------------------- [color=gray]There's More Than One Way To Do It[/color] |
|||
|
||||
| korob2001 |
|
||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 6 Всего: 61 |
Прочь сомнения. Когда ты вызываешь какой либо метод, Perl пытается сначала найти его в текущем пакете. Если ему это не удалось, то он проверяет массив @ISA по порядку и сначала вглубь. Это значит, если у нас какой либо класс является дочерним для нескольких родительских классов:
То сначала Perl будет искать метод, который ему не удалось найти в текущем пакете в родительском классе First, если и там его не окажется, то он проверит массив @ISA класса First. Если у класса First найден родитель, то следующим шагом будет поиск в его родителях и так до тех пор, пока у одного из родительских классов для класса First не будет найден предок. Если ему так и не удалось найти вызываемый метод, он возвращается в текущий пакет и проверяет следующего родителя, в данном случае, класс Second и точно так же, снача вглубь. Будет вызван тот метод new, который будет быстрее всего найден. Потому и происходит так-называемое перекрытие, все методы текщего пакета перекрывают методы родителей, методы первого родителя перекрывают, методы следующего родителя и т.д. Если же нужно унаследовать какой-либо метод и просто добавить ему чего-нить нового, то можешь определить его в своём классе, а затем обратиться к этому методу из родительского класса.
А вот этот метод в родителе:
Это сообщение отредактировал(а) korob2001 - 20.10.2005, 22:31 -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
||||||||
|
|||||||||
| Vaneska |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 141 Регистрация: 15.3.2005 Где: Москва Репутация: нет Всего: 4 |
Большое спасибо!
korob2001, тебе как всегда почет и уважение! --------------------
http://isokolov.blogspot.com/ |
|||
|
||||
![]()
|
| Правила форума "Perl: Системное программирование" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Системное программирование | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |