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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Закрытая тема
Старый 29.02.2012, 17:34
HardCoder вне форума Посмотреть профиль Отправить личное сообщение для HardCoder Найти все сообщения от HardCoder
  № 1  
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
  № 2  
fljot

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

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

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

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

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

Регистрация: Mar 2010
Адрес: Russian Federation
Сообщений: 59
Цитата:
Сообщение от Zebestov Посмотреть сообщение
gait, твой пример не противоречит тому, что привел alatar, он просто не по теме
А почему не по теме? Просто я до сих пор не нашел очевидных плюсов использования this, если я пользуюсь венгерской нотацией в именовании переменных и доступ к ним делаю через геттеры/сеттеры.

Добавлено через 7 минут
UPD.
Цитата:
Сообщение от etc Посмотреть сообщение
Постоянно this, постоянно super. Срач неинтересен, объяснять лениво.
О, Денис! Твое мнение очень авторитетно для меня, очень прошу, объясни, пожалуйста! Я сегодня даже плохо спал, всё из головы не выходили эти this и super. Хотя бы вкратце, ну пожаалуйста...


Последний раз редактировалось gait; 29.02.2012 в 17:24.
Старый 29.02.2012, 17:25
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 5  
Zebestov
Lorem ipsum
 
Аватар для Zebestov

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

Старый 29.02.2012, 17:11
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 6  
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Постоянно this, постоянно super. Срач неинтересен, объяснять лениво.

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

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Цитата:
О, Денис! Твое мнение очень авторитетно для меня, очень прошу, объясни, пожалуйста! Я сегодня даже плохо спал, всё из головы не выходили эти this и super. Хотя бы вкратце, ну пожаалуйста...
А чего тут объяснять? Есть понятие работаю много, работаю со всеми, сделать нужно качественно, максимально убрав логику - запороть . Для себя можно писать все , что угодно, работая же в команде this и super всегда, дабы не накосячить , хоть и процент 0.1
__________________
Марк Tween

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

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
Не переопределять метод. Создать B вместо C. Зачем их вообще переопределяют? =)
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают.

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

блогер
Регистрация: Apr 2011
Сообщений: 583
Записей в блоге: 2
Цитата:
Сообщение от fljot Посмотреть сообщение
Ну ведь это совершенно верно, для этого вы и переопределяли метод method().
Не для этого я его переопределил (см. ниже).
Цитата:
Сообщение от -De- Посмотреть сообщение
Не переопределять метод. Создать B вместо C. Зачем их вообще переопределяют? =)
А мне нельзя "не переопределять". Нужно позарез его переопределить!
Мне нужно создать спрайт-контейнер. В этот спрайт в дисплей-лист могу лишь добавлять воздушные шарики. Если добавлю что-то другое - полезет череда ошибок, поэтому я переопределяю addChild(). НО!!! Также этот контейнер обладает некой возможностью: добавлять какие-то определенные кнопки:
Код AS3:
public class A extends Sprite {
      public function addButton(y:Number):void {
            var button:SomeButton = new SomeButton();
            button.x = 87;
            button.y = y;
            super.addChild(button);
      }
}
Код AS3:
public class Container extends A {
      private var baloonsArray:Array = new Array();
 
      override public function addChild(child:DisplayObject):DisplayObject {
            if(!(child is Baloon)) {
                  throw new ArgumentError("I need only Baloons!!!!");
            }
            this.baloonsArray.push(child);
            return super.addChild(child);
      }
}
Код AS3:
var container:Container = new Container();
//добавляем новый шарик в контейнер
container.addChild(new Baloon());
//при желании добавляем кнопку
container.addButton(50);
По вашему в методе addButton я должен писать вместо super.addChild(button); - просто addChild(button); ?

Добавлено через 11 минут
Цитата:
Создать B вместо C
Ну, уберу я класс A. Метод addButton помещу в класс Container. И что это изменит? Все равно в методе addButton нужно писать "super".
__________________
Я мало чего умею, но зато хорошо умею учиться...


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

Регистрация: Jan 2009
Адрес: Петерсбург
Сообщений: 1,882
Цитата:
Сообщение от HardCoder Посмотреть сообщение
Не для этого я его переопределил (см. ниже).А мне нельзя "не переопределять". Нужно позарез его переопределить!
Мне нужно создать спрайт-контейнер. В этот спрайт в дисплей-лист могу лишь добавлять воздушные шарики. Если добавлю что-то другое - полезет череда ошибок, поэтому я переопределяю addChild(). НО!!! Также этот контейнер обладает некой возможностью: добавлять какие-то определенные кнопки
Для контейнера создайте интерфейс и никто ваш нерабочий addChild не вызовет.:
Код AS3:
public interface IContainer {
  function addBaloon(baloon:Baloon):void;
  function addButton(button:Button):void;
}

Если метод принимает в качестве параметра экземпляр класса DisplayObject, то он должен принимать всех наследников DisplayObject, а не только Baloon. Заводите в заблуждение разработчиков, внутрь ваших публичных методов никто не обязан смотреть.

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

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

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


 


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


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