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

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

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

блогер
Регистрация: Jul 2007
Сообщений: 940
Записей в блоге: 3
Цитата:
Сообщение от HardCoder Посмотреть сообщение
Ситуация та же, только вот мне не нужно, чтобы везде вызывался новый (переопределенный) метод, а как раз супер метод (везде, где я раньше написал "super").
Зачем тогда переопределять? *вопрос ко всем любителям супер-ов*

Старый 29.02.2012, 17:34
HardCoder вне форума Посмотреть профиль Отправить личное сообщение для HardCoder Найти все сообщения от HardCoder
  № 2  
HardCoder
 
Аватар для HardCoder

блогер
Регистрация: Apr 2011
Сообщений: 583
Записей в блоге: 2
Цитата:
Сообщение от fljot Посмотреть сообщение
Зачем тогда переопределять? *вопрос ко всем любителям супер-ов*
Как зачем? Ну очевидно же: чтобы его использовать.
Код AS3:
public class A {		
	public function method():void {
		trace("I`m original method");
	}
}
Код AS3:
public class B extends A {		
	public function func1():void {
		this.method();
	}
}
Код AS3:
public class C extends B {		
	override public function method():void {
		trace("I`m overriden method");
	}
}
Код AS3:
var c:C = new C();
//мне необходимо вызвать старый метод, а выходит - наоборот
c.func1();//I`m overriden method
//мне необходимо вызвать новый метод, все работает как надо
c.method();//I`m overriden method
Не получается то чего я хочу добиться. Поэтому, мне в теле func1() нужно менять "this.method();" на "super.method();". Противники супер-ов, как по вашему мне добиться того, что я хочу, если в функции func1() НЕ писать super.method() ?
__________________
Я мало чего умею, но зато хорошо умею учиться...


Последний раз редактировалось HardCoder; 29.02.2012 в 17:41.
Старый 29.02.2012, 17:52
fljot вне форума Посмотреть профиль Отправить личное сообщение для fljot Найти все сообщения от fljot
  № 3  
fljot

блогер
Регистрация: Jul 2007
Сообщений: 940
Записей в блоге: 3
Цитата:
Сообщение от HardCoder Посмотреть сообщение
//мне необходимо вызвать старый метод, а выходит - наоборот
c.func1();//I`m overriden method
Ну ведь это совершенно верно, для этого вы и переопределяли метод method().
Вмешиваетесь (переопределяете) — берёте на себя ответственность.

Вообще, как я вижу, красота этих обсуждений "чтобы работа класса не нарушилась, если кто-то что-то перепишет" рушится при переходе от A-B-C к A-B. В классе A мы не сможем писать super (потому что метод в нём же и определяем), значит переписанный метод в B приведёт к непоправимому. м?

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

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

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


 


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


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