![]() |
|
||||||||||
|
|
|
|||||
|
Регистрация: Oct 2006
Сообщений: 2,283
|
Цитата:
|
|
|||||
|
...
модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
|
Ты рассуждаешь о композиции, а не о наследовании. Когда кот мурзик рождается на свет, то это одно целое - кот. Он не выходит по частям: сначала появилось некое животное, а потом к нему приклеили усы и хвост. Нет это просто кот, он не рождается позже или раньше кого-то, он сам по себе. И являясь животным, при этом он обладает своими собственными свойствами и поведением, которое у "базового животного" может отличаться или отсутствовать. Поэтому кот, как целое, волен вызывать суперконструктор, исходя из своего собственного поведения. В конце концов конструктор - это тот же метод как и прочие. А если переопределив какой-то метод нам необходимо вызвать внутри этого метод супер версию, то мы обязаны, следую твоей логике, делать этот вызов исключительно вначале? Или, все же исходя из того, какое поведение тебе нужно получить?
upd: Другое дело, что до рождения кота, мы не можем его заставить ходить или мяукать, поэтому нет смысла вызывать мяу(), до того как кот будет создан, но сам процесс создания мы можем контролировать. Последний раз редактировалось udaaff; 07.11.2015 в 18:01. |
|
|||||
|
Цитата:
![]() Все равно твой подход не верный. Пример Wolsh'a тоже не является доказательством правильности такого подхода. Можно вызывать super() c параметрами по умолчанию, а потом назначить все опции окна через сеттеры. В том же конструкторе. И окно сразу появится с нужным видом. Такие сеттеры должны быть, иначе это недоработка какая-то. Кто-то сейчас по-любому подумает "зачем сначала создавать окно с видом по умолчанию, а потом его менять?" Но я отвечу так: чтобы была более чистая и правильная архитектура. В том же MVC делается часто много "лишней" работы. Зачем передавать какие-то модели, виды, котроллеры, когда можно легко все писать в одном "классе-полотенце" и по-максимуму использовать всякие глобальные переменные. Все из-за той же правильной архитектуры. В общем, спорить у меня как-то настроения нет. Я считал и буду считать этот подход не правильным, и никто мне не докажет обратного) |
|
|||||
|
Lorem ipsum
|
udaaff, можешь привести пример "необходимых перед вызовом super()" действий?
__________________
Поймай яблоко 2! |
|
|||||
|
...
модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
|
|
|
|||||
|
Lorem ipsum
|
__________________
Поймай яблоко 2! |
|
|||||
|
...
модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
|
Чем тебя пример не устраивает?
|
|
|||||
|
Lorem ipsum
|
Тем, что он какой-то нелепый. Независимо от того, что ты хочешь переопределить, все равно будет вызван super() и родительский init(). Таким образом никакой необходимости делать что-то до super() все еще не видно.
__________________
Поймай яблоко 2! |
|
|||||
|
...
модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
|
Речь идет о переопределенном методе init().
class SuperClass { public function SuperClass() { super(); init(); } protected function init():void { } } class SubClass extends SuperClass { public function SubClass(param:*) { _param = param; super(); } private var _param:*; override function init():void { super.init(); trace(_param); } } |
|
|||||
|
Lorem ipsum
|
Мне кажется, или при new SubClass() не будет никакого трейса?
А вот Wolsh привел хороший пример, да.
__________________
Поймай яблоко 2! |
![]() |
![]() |
Часовой пояс GMT +4, время: 12:14. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|