|
|
|||||
Et cetera
Регистрация: Sep 2002
Сообщений: 30,784
|
Полезно отмечать методы как final, если нужно сохранить к ним доступ в наследниках, но при этом запретить переопределение, т. к. оно может повлиять на работоспособность.
|
|
|||||
Регистрация: May 2009
Сообщений: 220
|
Цитата:
public function hasUnit(unit:IUnit):Boolean { //search unit } private function _doSomeThing():void { ... if (this.hasUnit(tank)) ...; ... } override public function hasUnit(unit:IUnit):Boolean { // no call super.hasUnit() var myVar:Boolean; ... return myVar; } Конечно, когда программист один, такое можно и предусмотреть. А когда несколько? Вот захотелось напарнику переопределить hasUnit для целей наследника. Зачем ему лезть в твой супер-класс и смотреть как бы не поломать логику в наследнике? Нужно создать такие условия, которые бы помешали ему несознательно нарушить логику супер-класса. |
|
|||||
Регистрация: Sep 2008
Адрес: Москва
Сообщений: 224
|
Эдобы предлагают использовать для вызова переопределённого метода дальнего предка, например:
public class A { public function a():void { } } public class AA extends A { override public function a():void { } final public function $a():void { super.a(); } } И так далее в каждом наследнике добавлением $. |
|
|||||
блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
|
Цитата:
Цитата:
Цитата:
r_r_f_r, понятно, спасибо. Это уже реально похоже на практическую ценность. А $ - это правильно так писать, или это ради примера лишь? Я про Code Conversion, или как он там.
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
Переписываем setter url в наследнике URLRequest (чтобы ничего не менялось) и подсовываем api_wrapper'у вкотакте url с javascript.
В качестве аргумента новый класс прокатил бы, так как он наследник от URLRequest, но final и тут не поспоришь.
__________________
if (love is true) break my.heart; Последний раз редактировалось Rzer; 18.03.2010 в 00:54. |
|
|||||
Регистрация: May 2009
Сообщений: 220
|
верно, что-нибудь. Например, порушит всю программу Почему? Потому что метод _doSomeThing вызовет не метод hasUnit, определенный в базовом классе, а переопределенный метод hasUnit в наследнике. А что вернет переопределенный hasUnit известно только тому, кто будет этот метод переопределять.
Для _doSomeThing эта ситуация выглядит так: private function _doSomeThing():void { ... //if (this.hasUnit(tank)) ...; if (Math.random() - 0.5 > 0) ...; ... } Цитата:
Или вы считаете, что при создании объекта TankGroup метод _doSomeThing не выполниться (код ниже)? public class Group { public function Group(units:Array):void { super(); .... this._doSomeThing(); } ... } public class TankGroup extends Group { public function Group(tanks:Array):void { super(tanks); .... } override public function hasUnit(unit:IUnit):Boolean { ... } } Цитата:
Мне одному видится, что этой фразой Psycho Tiger правильно ответил на все остальные вопросы? Последний раз редактировалось switcher!; 18.03.2010 в 00:30. |
|
|||||
блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
|
switcher, я правда не понимаю вообще ничего из того, что вы мне пытаетесь донести.
Провёл тест: package { import flash.display.Sprite; /** * ... * @author Artem Shlagin */ public class JustMain extends Sprite { public function JustMain() { super(); var myClass:SecondClass = new SecondClass(); myClass.runBaseClassTest(); } } } package { /** * ... * @author Artem Shlagin */ public class BaseClass { public function BaseClass() { super(); trace("I`m base class constructor"); } public function someMethod():void { trace("BASE CLASS: Some method"); } protected function runTest():void { trace("BASE CLASS: Run test"); } } } package { /** * ... * @author Artem Shlagin */ public class SecondClass extends BaseClass { public function SecondClass() { trace("I`m daughter"); } override public function someMethod():void { trace("Some method -> DAUGHTER!!!"); } public function runBaseClassTest():void { super.runTest(); } } } и порушить логику работы. Output: Цитата:
Цитата:
Цитата:
Цитата:
UPD: Блиииииин... А вызов то метода забыл, и правда, вызовется ребёнок. Да, switcher, вы правы. Вопросы отпали. Хотя я так и не понял, что вы хотели сказать своей последней фразой
__________________
Тут мужик танцует и поёт про флэш Последний раз редактировалось Psycho Tiger; 18.03.2010 в 16:08. |
|
|||||
Регистрация: May 2009
Сообщений: 220
|
Да, собственно, подчеркнул правильность мысли по поводу EventDispatcher, которую в частности отражает введение в код приватного метода _hasUnit (в первом моем посте топика)
|
|
|||||
.
|
Цитата:
Добавлено через 1 минуту Вот это более понятно. |
|
|||||
блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
|
Всё равно не понял
__________________
Тут мужик танцует и поёт про флэш |
Часовой пояс GMT +4, время: 14:39. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|