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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 10.05.2010, 23:59
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 21  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
не хочу поднимать ахинею снова, но this.methodA() из шестого поста как раз может быть вызван переопределенным, поэтому правильный ответ в постах 3, 15 ну и, естесственно, 16

Старый 11.05.2010, 00:16
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 22  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
0о т.е. в базовом классе A вызов this.methodA() вызовет не A::methodA()? куда катится мир...

P.S.
может я просто не уловил сути.
тут часом не обсуждается навязчивая идея использовать super в базовом классе, расширяющим Object (т.е. ничего), и чтобы все работало?
если так — то я мимо... и это просто забава такая для тренировки ума... как эспандер =) никакой полезной работы для Отечества.
__________________
Поймай яблоко 2!


Последний раз редактировалось Zebestov; 11.05.2010 в 00:23.
Старый 11.05.2010, 01:08
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 23  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
Часом не обсуждается. Я думал что непереопределенный метод можно было вызвать по-простому - super.methodA(). Однако этот метод ищется действительно в супере, т.е в Object. Вариант только однин (без закидонов) - написать приватный метод, реализующий "родной" methodA. А на счет this.methodA() - если в классе СassB я его переопределю, то в СlassA, который нуждается в "родном" methodA(), вызовется уже переопределенный. Т.е будет B::methodA().

Если совсем непонятно про что речь и к чему это все. То в двух словах:
Есть базовый класс, в котором есть
Код AS3:
public function _2x2():int
, и она всегда для базового класса должна отдавть естественно 4.
Но вот в один день мне вдруг взгрустнулось, и я решил расширить сласс, да так, чтобы для нужд нового расширенного класса, эта самая функция могла бы возвращать, скажем -4.
Если базовый класс будет вызывать this._2x2(), то, естественно, он будет давать результаты, мягко скажем не те, какие ожидаются. Так вот чтобы его логика не нарушалась, и нужно в базовом классе как то вызывать "родную" _2x2(). А как это сделать уже выяснили.

Старый 11.05.2010, 01:39
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 24  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
приехали... наследуемый класс переопределяя метод оказывается переопределяет его и в суперклассе... пошел смотреть сериал...
__________________
Поймай яблоко 2!

Старый 11.05.2010, 01:43
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 25  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Цитата:
0о т.е. в базовом классе A вызов this.methodA() вызовет не A::methodA()? куда катится мир...
this указывает не на класс, а на экземпляр. А экземпляр в данном случае - экземпляр класса-наследника. И методы у этого экземпляра - класса-наследника. Всё более чем логично.
__________________
Reality.getBounds(this);

Старый 11.05.2010, 02:22
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 26  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
Zebestov, вот если не веришь или лень проверять...
Представляю вашему обозрению пост номер 7. Особое внимание прошу уделить трэйсу:
Цитата:
_b.methodA_simple(): ClassB::methodA()
Еще вопросы или недоверия есть?


Последний раз редактировалось i.o.; 11.05.2010 в 02:29.
Старый 11.05.2010, 03:28
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 27  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
я очень прошу. можно еще раз, другими словами, популярно пояснить — чего мы хотим? Пост #7 с демонстрацией того, как все запущено, мне в упор не понятен.

ну надо тебе иметь базовый класс, ну опиши его:
Код AS3:
public class ClassA
{
	public function ClassA():void
	{
	}
 
	public function methodA():String
	{
		return "ClassA::methodA()";
	}
}
надо тебе его расширить, ну расширяй:
Код AS3:
public class ClassB extends ClassA
{
	public function ClassB()
	{
		super();
	}
 
	override public function methodA():String
	{
		return "ClassB::methodA()";
	}
}
и ты утверждаешь, что теперь будет так:
Код AS3:
var _a:ClassA = new ClassA();
var _b:ClassB = new ClassB();
 
trace(_a.methodA());		// думаешь, что выведет "ClassB::methodA()",
				// потому что мы его переопределили в наследнике
или о чем вообще три страницы?

о том что:
Код AS3:
var _b:ClassB = new ClassB();
 
trace(_b.methodA());		// таки выведет "ClassB::methodA()",
				// потому что мы его переопределили в наследнике
а ты хотел, чтобы вывело "ClassA::methodA()"? тогда зачем ты вообще его переопределял?

или ты хочешь одной иметь в экземпляре класса B возможность вызвать и переопределенный и непереопределенный методы? тогда зачем ты вообще грузишь этими проблемами суперкласс A? Допиши в ClassB новый метод, скажем, methodAsuper(), в котором вызываешь просто super.methodA(). и будет твое заветное:
Код AS3:
var _b:ClassB = new ClassB();
 
trace(_b.methodAsuper());	// таки выведет "ClassA::methodA()",
но не в ClassA же это делать. не его головная боль, что ты там навыдумывал в наследнике.
__________________
Поймай яблоко 2!

Старый 11.05.2010, 12:55
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 28  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
Zebestov, не утруждайте себя, вопрос был в другом. Если бы вы хотели понять, о чем идет тут речь, то задумались бы, почему тема началась всего лишь с одного класса. Я не собираюсь тут каждому на пальцах разъяснять, что хотел. Тем более что ответ давным давно получен.

Индивидуально для Zebestov попробую в последний раз объяснить все же:
У меня есть базовый класс А, так вот в нем все должно работать всегда одинаково и исправно, несмотря на то, что некоторые его методы, можно переопределить. Т.е он должен уметь вызывать свои родные методы. Наследники тут не при чем, это просто для примера было. Из наследников нет необходимости вызывать супер методы. В трэйсе для примера были вызовы, чтобы показать, что именно вызывается в базовом классе. Все ли сейчас понятно?

Сама задача проще некуда, просто решил узнать есть ли способ обойтись без создания дополнительных приватных функций, вот и все. Хотелось вызывать непереопределенный метод так же, как и в наследниках - super.methodA(), но так не получается.


Последний раз редактировалось i.o.; 11.05.2010 в 13:13.
Старый 11.05.2010, 14:00
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 29  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
Цитата:
Сообщение от i.o. Посмотреть сообщение
Индивидуально для Zebestov попробую в последний раз объяснить все же:
У меня есть базовый класс А, так вот в нем все должно работать всегда одинаково и исправно, несмотря на то, что некоторые его методы, можно переопределить.
благодарю за индивидуальный подход =)
что-то подозреваю, но еще хочу уточнить. под "некоторые его методы можно переопределить" ты имеешь в виду непосредственно через месячишко взять этот же класс и переписать его метод(ы) с какими-то сколь-нибудь существенными изменениями? и чтобы при этом по прежнему можно было пользовать еще и старые версии?
__________________
Поймай яблоко 2!

Старый 11.05.2010, 14:08
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 30  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
Цитата:
что-то подозреваю, но еще хочу уточнить. под "некоторые его методы можно переопределить" ты имеешь в виду непосредственно через месячишко взять этот же класс и переписать его метод(ы) с какими-то сколь-нибудь существенными изменениями? и чтобы при этом по прежнему можно было пользовать еще и старые версии?
Нет. Если прикалываешься, то это уже не весело ))

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

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

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


 


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


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