Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Что дает употребление this в не динамических классах? (http://www.flasher.ru/forum/showthread.php?t=176005)

sonofatrus 29.02.2012 18:37

super нужен для вызова метода в родителе, который переопределяется в наследнике. Иными словами BaseEnemy.hurt()->AngryEnemy.hurt()->EvilEnemy.hurt(). В классе BseEnemy hurt пустой (чуть позже почему он там нужен). AngryEnemy имеет свой метод hurt который например запускает анимацию челюстей. А EvilEnemy, наследник AngryEnemy должен челюстями щелкать и лапами хватать. Вот когда надо super.hurt() вызывать в методе AngryEnemy.hurt(). Иначе только лапами хватать будет. А насчет зачем в BaseEnemy пустой hurt() - всех врагов загоняем в один типизированый массив и можем вызвать hurt(), изз-за полиморфизма вызовется hurt непосредственно экземпляра того класса который есть.
Про this уже в начале написали. Лично я пишу только возврата экземпляра класса, когда надо наприемр сделать цепочку вызовов.

HardCoder 29.02.2012 18:42

Цитата:

Сообщение от Bgg (Сообщение 1066270)
Для контейнера создайте интерфейс и никто ваш нерабочий addChild не вызовет.:
Если метод принимает в качестве параметра экземпляр класса DisplayObject, то он должен принимать всех наследников DisplayObject, а не только Baloon. Заводите в заблуждение разработчиков, внутрь ваших публичных методов никто не обязан смотреть.

Это лишь пример, не надо зацикливаться на том что я написал: почему я повесил исключение на случай неправильного параметра, почему именно шарики а не голые бабы, почему я не использовал интерфейс... Смотреть надо глубже: я использовал наследование. В подклассе переопределил какой-то метод, не важно какой. Почему переопределил - некая необходимость. Почему не использовал интерфейс - его ненужность в определенном случае. Почему в одном из методов я использовал супер - потому что нужно вызвать оригинальный метод, а не переопределенный.
Ладно, я вижу одни используют супер, другие - нет. Ну что же - официально признаю что я не могу привести пример, где без super нельзя обойтись. Но когда мне на практике такая ситуация встретится - я по-глупому, по-нубски напишу "super" там где он понадобится, а противники пусть лепят костыли и ломают голову как без этого ненавистного антирелигиозного "super" обойтись.
Умываю руки. Всем спасибо за внимание и терпение :)

КорДум 29.02.2012 18:44

Цитата:

В этом году superсрача еще не было.
Димарик как бы намекает, что эта тема не в единственном экземпляре чудесно ищется через поиск. И ничего нового тут, по сравнению с теми разами, не сказано.

-De- 29.02.2012 19:53

HardCoder, сделали, чтоб нельзя было добавлять не Baloon - не добавляет. Был бы super - добавляло бы несмотря на это, делало это неочевидно и могло бы привести к багам. Если нужно исключение - прописываем его осознанно и явно.

Wolsh 29.02.2012 20:21

Закрываю, ибо всё сказано.

iNils 07.03.2012 15:51

Использую this и super только когда нужно.

dimarik 07.03.2012 22:29

Использую this и super всегда. Денискина школа большого у-шу.


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

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