Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Использование super (http://www.flasher.ru/forum/showthread.php?t=137068)

etc 06.04.2010 14:55

Цитата:

Сообщение от Котяра (Сообщение 898343)
super для методов а не свойств.

Вполне себе и для свойств. То, что не работает инкремент при super — баг.

Psycho Tiger 06.04.2010 15:21

Про баг понял, из за него буду писать просто x+= :(

То есть, чтобы уж точно - по второму кругу - ВСЕ свойства, сеттеры, геттеры и методы, определенные в базовом классе и выше должны вызываться через super, и по сути this.addEventListener без переопределения этого метода писать неправильно с точки зрения сверх-грамотного флешеризма?

dimarik 07.04.2010 00:19

Цитата:

Сообщение от Psycho Tiger (Сообщение 898338)
Ещё заметил, что mxmlc не хочет компилировать конструкцию
Код AS3:

super.x+=10;

Однако,
Код AS3:

x+=10;

компилируется. У меня бета, из за этого или есть какая-то фишка?

Вполне вероятно, что и
Код AS3:

this.property += value;

не скомпилится.

Добавлено через 3 минуты
являясь (круто, три буквы "я"!) автором класса, вы вправе переопределять методы надкласса(ов). Употреблять super для меня не столько модно, сколько для понимания исходного кода, что этот метод точно вызывается у суперклассов.

MrPoma 07.04.2010 01:20

Цитата:

Сообщение от PsycoTiger
Ещё заметил, что mxmlc не хочет компилировать конструкцию
Код AS3:

super.x+=10;

Однако,
Код AS3:

x+=10;

компилируется. У меня бета, из за этого или есть какая-то фишка?

Я пользуюсь заплатками
Код AS3:

super.x = super.x + 10;


джонатан 29.09.2010 19:27

Ребят, а если не сложно, расскажите мне пожалуйста на пальцах, для чего, и как используется super(); :)

arkadattx 29.09.2010 21:25

Присоединяюсь к вопросу джонатана.
Я так понимаю, что если нам явно не нужно вызвать метод суперкласса, то мы просто страхуемся, что, как написал Psycho Tiger, "true"?

Psycho Tiger 29.09.2010 21:45

Ага, типа того.
Я уже понимаю людей кто явно пишет this и super. Код без super`ов для меня с некоторых пор стал читаться хуже... Но я ни в коем случае не агитирую писать его везде где только можно ) Это дело вкуса.

cleptoman 29.09.2010 21:51

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

f.g.programmer 29.09.2010 21:52

Возможно super() может быть полезен, если мы хотим выполнить какой-то дополнительный код до вызова конструктора расширяемого класса.

Насчёт использования super для вызова методов присоединяюсь к мнению тех, кто считает, что это использование оправдано только в соответствующем перезаписываемом методе, т.е.
Код AS3:

override public function callMyMethod():void {
        //...
        super.callMyMethod();
        //...
}

И в этом есть смысл, ведь переопределяем мы методы именно для того чтобы использовать переопределённые методы. Так?

Добавлено через 3 минуты
И ещё при глубокой вложенности классов super совсем не помогает найти метод.

Котяра 29.09.2010 22:28

не знаю - я не использую супер везде.
Не вижу смысла. Только проблемы.
А если мне нужно вызвать
допустим есть
Цитата:

publiс function redraw():void
{
super.init();
super.draw();
}
я переопределил у наследника метод draw, теперь мне нужно искать по коду какого не работает нормально redraw? или переопределять его тоже?
фанатизм не нужен. если ты уверен что нужно вызывать ТОЛЬКО метод родителя тогда супер, а если надо/есть возможность переопределить - то не стоит - писанием кругом super мы нарушаем полиморфизм - не даёт потомкам нормально мутировать.


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

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