|
|
|||||
Регистрация: Mar 2013
Сообщений: 290
|
Исчерпывающий смысл Extends
Всем привет, хотел вот такой теоретический вопрос прояснить.
Я так понимаю, что Extends нужен лишь для того, чтобы данный класс имел возможность использовать все глобальные переменные и методы своего суперкласса. И не более того? Просто иногда компиллятор заставляет наследовать некоторые классы например к MovieClip. Хотя сам класс не использует никакие методы этого системного класса. Или всё-таки как-то неявно использует? Может быть есть что-то еще, какой-то дополнительный смысл в этой директиве? |
|
|||||
|
|
|||||
Регистрация: Mar 2013
Сообщений: 290
|
KumoKairo, ну в целом это всё понятно, да.
Но зачем например компиллятор Flash CS3 заставляет наследовать некий класс, если его методы и свойста не нужны? |
|
|||||
Регистрация: Jun 2013
Сообщений: 3
|
Какие например?
|
|
|||||
[+1 16.07.13]
[+4 16.07.13] Регистрация: Oct 2005
Сообщений: 217
|
Это вы так думаете , что свойства не нужны .Потому что вы явно их не используете, на самом деле например ,если вы хотите создать новый отображаемый объект вы должны расширить класс , который в свою очередь через цепочку наследования, наследует класс DisplayObject.Чтобы новый Вами созданный объект обладал свойствами , которые позволят отобразить его на экране.
|
|
|||||
Цитата:
Он заставляет унаследовать документ класс от Sprite или MovieClip, потому что нужен метод addChild (как минимум), а так как унаследовать его от DisplayObjectContainer нельзя, спрайт является минимальным требованием, плюс этот класс должен быть диспетчером событий, коим спрайт (и его наследник мувиклип), так же является. |
|
|||||
Регистрация: Mar 2013
Сообщений: 290
|
Ясно, спасибо.
|
|
|||||
Modus ponens
|
Ну, на самом деле Flash CS предлагает не самый лучший воркфлоу. Действительно хорошего мало в наследовании от Sprite/MovieClip если нужно написать компоненту более сложную, чем скин для другой компоненты.
Лучшей практикой было бы создать легковесные классы управляющие поведением скина, а в скине использовать обычные, или дополненные графические объекты. Таким образом вы избегаете необходимость учитывать поведение по умолчанию унаследованых классов в своем коде. Например, очень частой порочной практикой является желание переопределить x, y, width, height у графических объектов. Но когда это доходит до каких-то недоразумений вызванных тем, что эти свойства в действительности не просто поля, а вычисляются на основе матрицы трансформации хранящейсвя в displayObject.transform проблема становится очень сложной. Аналогичная ситуация с масками, режимами наложения, scrollRect, scale9grid, и может еще чего запамятовал. Так что я бы советовал оставить Sprite / MovieClip в покое - не наследовать их / не пытаться изменить поведение по умолчанию, а просто включать их как члены ваших классов. Т.е. композиция вместо наследования.
__________________
Hell is the possibility of sanity |
|
|||||
Регистрация: Mar 2013
Сообщений: 290
|
wvxvw, понятно. У Мука наследование идет первым делом, но когда он рассказывает про композиции, то получается, что они имеют больше плюсов, а в минусах только, вроде бы скорость исполнения.
Цитата:
|
|
|||||
[+1 16.07.13]
[+4 16.07.13] Регистрация: Oct 2005
Сообщений: 217
|
wvxvw , а как вы себе представляете написания основного класса (назовем его Main.as) , не используя наследования , а полагаясь на композицию .Да и свой собственный класс , который вы напишите и захотите его экземпляр отобразить на экране , должен ка минимум расширять DisplayObject , ну а какие либо другие свойства от MovieClip например , вы сможете использовать через композицию.
|
Часовой пояс GMT +4, время: 20:51. |
|
« Предыдущая тема | Следующая тема » |
Теги |
class , extends , inheritance , superclass |
|
|