![]() |
|
||||||||||
|
|||||
package {
public class Tbase
{
public function doIt()
{
trace("BaseClass Forever!");
}
}
public class TMyClass extends Tbase
{
public override function doIt()
{
trace("But MyClass is more specific");
}
}
}
Делаю так, не выходит var Obj:Tbase = new TMyClass(); Obj.doIt(); (Obj as Tbase).doIt(); var MyObj:TMyClass = new TMyClass(); MyObj.doIt(); (MyObj as Tbase).doIt(); Tbase(MyObj).doIt(); var ObjBase: Tbase =new Tbase(); ObjBase.doIt(); //(ObjBase as TMyClass).doIt(); //TMyClass(ObjBase).doIt(); // Не может конвертировать |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Если метод переопределен, то вызвать метод супер-класса извне невозможно.
Перегрузки методов в AS3 нет. Переопределенный метод — уже полиморфизм. |
|
|||||
|
Хм, значит такое вот определение полиморфизма не правильное
Цитата:
|
|
|||||
|
Регистрация: Dec 2003
Адрес: Москва
Сообщений: 176
|
ээ.. ну почему же неправильное?
строчка "в зависимости от типа данных, полученных в сообщении" очень абстрактна как-то. В данном случае можно трактовать так, что Obj был создан как TMyClass, т.е. таким образом получил тип данных TMyClass посредством некоего магического сообщения А строчка
лишь приводит тип, а не делает Obj инстансом класса TBase. И как раз фишка в том, что можно написать для нескольких наследников TBase и вызовется именно тот "правильный" метод, который был переопределен в наследнике. а в этом месте: var ObjBase: Tbase =new Tbase(); ObjBase.doIt(); //(ObjBase as TMyClass).doIt(); //TMyClass(ObjBase).doIt(); // Не может конвертировать , короче к наследнику) не работает никогда. И это логично.Последний раз редактировалось fishbounce; 23.11.2007 в 11:53. |
|
|||||
|
Цитата:
Теперь порядок! Теперь понятно что такое полиморфизм! |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Цитата:
А полиморфизм — да, верно. Только тут явно нужен интерфейс. И ещё, в ActionScript, равно как и в Java, не принято использование Delphi-вских заморочек с имена классов, начинающихся на «T». |
|
|||||
|
Цитата:
Цитата:
|
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Так и есть, собственно. Нельзя извне вызвать метод супер-класса, если он переопределен в наследнике.
То, что в качестве типа в функции указан базовый класс, вовсе не означает, что у переданного объекта будет вызван метод его супер-класса, а не собственный переопределенный. |
|
|||||
|
Цитата:
|
|
|||||
|
Регистрация: Jun 2010
Сообщений: 120
|
Добрый день. Не могли бы разъяснить на пальцах, что такое полиморфизм. Читал и Википедии, и у Мука и на данном сайте, но, честно говоря, не понял.
|
![]() |
![]() |
Часовой пояс GMT +4, время: 13:40. |
|
|
« Предыдущая тема | Следующая тема » |
|
|