Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 04.03.2010, 15:55
orcpochta вне форума Посмотреть профиль Отправить личное сообщение для orcpochta Найти все сообщения от orcpochta
  № 1  
Ответить с цитированием
orcpochta

Регистрация: Feb 2008
Сообщений: 890
По умолчанию Недопонимание перекрытия методов суперкласса

Есть СуперКласс и НаследникКласс.
СуперКласс определяет метод testMethod( ), а НаследникКласс его переопределяет.

Могу ли я как-то вызвать над экземпляром класса НаследникКласс непереопределенный метод testMethod( ) класса СуперКласс?

т.е. экземплярНаследникКласс.testMethod( ) - вызывается переопределенный метод
а экземплярНаследникКласс.что-то-как-то.testMethod( ) - вызывает непереопределенный метод.

Мне казалось, что должно сработать через приведение:
СуперКласс(экземплярНаследникКласс).testMethod( )

Но это не работает, а так хотелось)))
__________________
скриптограф

Старый 04.03.2010, 15:57
GentleFLASH вне форума Посмотреть профиль Отправить личное сообщение для GentleFLASH Найти все сообщения от GentleFLASH
  № 2  
Ответить с цитированием
GentleFLASH

Регистрация: Apr 2009
Сообщений: 117
в НаследникКласс нужно вызвать super.testMethod() - это и будет непереопределенный метод СуперКласс'а

Старый 04.03.2010, 16:05
orcpochta вне форума Посмотреть профиль Отправить личное сообщение для orcpochta Найти все сообщения от orcpochta
  № 3  
Ответить с цитированием
orcpochta

Регистрация: Feb 2008
Сообщений: 890
Цитата:
Сообщение от GentleFLASH Посмотреть сообщение
в НаследникКласс нужно вызвать super.testMethod() - это и будет непереопределенный метод СуперКласс'а
не-не-не... мне нужно не в классе его вызывать, а снаружи над экземпляром, т.е. иметь возможность вызывать обе версии метода над экземпляром
__________________
скриптограф

Старый 04.03.2010, 16:24
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 4  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Цитата:
мне нужно
Не нужно. Метод для того и переопределяется.
Хотите иметь два разных, сделайте в наследнике другой метод где и будет переопределенный код.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 04.03.2010, 17:05
GentleFLASH вне форума Посмотреть профиль Отправить личное сообщение для GentleFLASH Найти все сообщения от GentleFLASH
  № 5  
Ответить с цитированием
GentleFLASH

Регистрация: Apr 2009
Сообщений: 117
ну если через namespace, а может и не получится..

Старый 04.03.2010, 17:15
orcpochta вне форума Посмотреть профиль Отправить личное сообщение для orcpochta Найти все сообщения от orcpochta
  № 6  
Ответить с цитированием
orcpochta

Регистрация: Feb 2008
Сообщений: 890
Цитата:
Сообщение от iNils Посмотреть сообщение
Не нужно. Метод для того и переопределяется.
Хотите иметь два разных, сделайте в наследнике другой метод где и будет переопределенный код.
Вдумайтесь как все могло бы быть красиво))))

Для примера возьмем toString( ). Есть стандартный toString( ) для Object. Для нашего класса определим свой toString( ), для подкласса тоже свой и т.д. Получаем, что для одного экземпляра можно было бы вызывать любой toString( ) через приведение:
trace(instance);
trace(SuperClass(instance));
trace(Object(instance));

Живой пример:
Есть класс, представляющий структуру данных, например, таблицу - Table. Метод toString( ) делает строку из элементов этой таблицы. Есть расширяющий класс субтаблица (фрагмент таблицы) SubTable - по сути та же таблица, хранящая вместо элементов или значений ссылки (индексы) на ячейки основной таблицы, т.е., работая с субтаблицей, мы по сути работаем с исходной таблицей, но только в окрестностях, ограниченных нашей субтаблицей.
В классе SubTable, если не переопределять toString( ), будет получаться строка ссылочных индексов на исходную таблицу, но логично будет его переопределить так, чтобы выдавалась строка конечных значений таблицы в окрестности субтаблицы.
Тогда мы могли бы выводить значения ячеек субтаблицы через
trace(subtable);
а саму фактическую таблицу (т.е. таблицу индексов, ссылающихся на исходную таблицу, через которые описывается связь субтаблицы и примарной таблицы) через
trace(Table(subtable));

Красиво же)))
__________________
скриптограф

Старый 04.03.2010, 17:32
GentleFLASH вне форума Посмотреть профиль Отправить личное сообщение для GentleFLASH Найти все сообщения от GentleFLASH
  № 7  
Ответить с цитированием
GentleFLASH

Регистрация: Apr 2009
Сообщений: 117
Это на виртуальные методы по описанию похоже. В AS3 хоть и есть ключевое слово virtual, только вот оно не работает. В википедии про виртуальные функции написано и в инете есть примеры на AS3, где они не работают.

Старый 04.03.2010, 17:54
chabapok вне форума Посмотреть профиль Отправить личное сообщение для chabapok Найти все сообщения от chabapok
  № 8  
Ответить с цитированием
chabapok

Регистрация: Jul 2009
Сообщений: 240
Записей в блоге: 1
Хм, а если явно указать класс, которым итерпретировать объект. Не гарантирую что выйдет, но попробуйте так:
(obj as SupserClass).superClassMethod();
(obj as SuperUnderSuperClass).superClassMethod();
и тд.

Старый 04.03.2010, 17:55
ps_spectre вне форума Посмотреть профиль Отправить личное сообщение для ps_spectre Найти все сообщения от ps_spectre
  № 9  
Ответить с цитированием
ps_spectre
 
Аватар для ps_spectre

блогер
Регистрация: Jan 2010
Адрес: Киев
Сообщений: 156
Записей в блоге: 4
Отправить сообщение для ps_spectre с помощью Skype™
[offtop]
Виртуальные функции работают как надо в АС3. Так что не надо. см след. страницу. )
Код AS3:
 
class Foo extends Object
{
	public virtual function Test():void
	{
		trace("Foo.Test()");
	}
}
class Bar extends Foo
{
	public override function Test():void
	{
		trace("Bar.Test()");
	}
}
class Biz extends Bar
{
	public override function Test():void
	{
		trace("Biz.Test()");
	}
}
====
 
			var f:Foo = new Foo();
			f.Test(); 
			f = new Bar();
			f.Test();
			f = new Biz();
			f.Test();
[/offtop]


Последний раз редактировалось ps_spectre; 04.03.2010 в 20:05.
Старый 04.03.2010, 18:49
relevance4 вне форума Посмотреть профиль Отправить личное сообщение для relevance4 Посетить домашнюю страницу relevance4 Найти все сообщения от relevance4
  № 10  
Ответить с цитированием
relevance4

Регистрация: Nov 2006
Адрес: там
Сообщений: 468
Отправить сообщение для relevance4 с помощью ICQ
Цитата:
Сообщение от orcpochta Посмотреть сообщение
Красиво же)))
красиво будет сделать метод, в который передаются индексы субтаблиц (или как там у вас устроено), которые нужно получить в виде строки и ещё один метод для получения строки всех таблиц, который, кстати, будет дёргать метод с индексами.

мне по крайней мере видится так (:

Создать новую тему Ответ Часовой пояс GMT +4, время: 12:39.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 12:39.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.