Форум Flasher.ru

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

3p.station 12.09.2010 02:13

доступ к субклассу из суперкласса
 
всем привет!
такой вот уменя вопрос
создаю я к примеру супер класс:
Код AS3:

package  {
 
        public class MyObject extends Sprite{
 
                public function MyObject() {
                }
        }
}

потом создаю суб-класс:
Код AS3:

package  modules{
 
        public class SubMyObject extends MyObject{
 
                public var myParam:String = "Hello";
                public function SubMyObject()
                {
                }//end constructor
        }
}

теперь где либо дальше у себя в коде создаю например экземпляр subMyObject:
Код AS3:

 var subMyObject:SubMyObject = new SubMyObject()


вопрос: можно ли как то в супер классе(MyObject) достучаться к перемнной myParam ? или нужно делать так типа
Код AS3:

super.init(myParam)

а в суперклассе уже ловить в функции init?

in4core 12.09.2010 02:29

Что то непонятно вы описали взаимодейтсвие. Особенно вот это :
Цитата:

теперь где либо дальше у себя в коде создаю например экземпляр subMyObject:
В любом месте какого класса, супер или суб?! Это важно, чтобы вас понять.

Ну а вообще если только перменную надо вывести и она у вас public const , то импортируем класс создаем новый экземпляр и выводим что надо. Тоесть если отвечать на вопрос
Цитата:

вопрос: можно ли как то в супер классе(MyObject) достучаться к перемнной myParam ? или нужно делать так типа
Который вы возможно задали не верно то ответ вот он

Код AS3:

package  {
        import modules.SubMyObject;
 
        public class MyObject extends Sprite{
 
                public function MyObject() {
                  trace(SubMyObject.myParam)
                }
        }
}

Добавлено через 3 минуты
Или да

Код AS3:

package  {
 
        public class MyObject extends Sprite{
 
                public function MyObject() {
                }
              public function init(...params) {
                trace(params as Array); }
        }
}


gloomyBrain 12.09.2010 02:45

Цитата:

Который вы возможно задали не верно то ответ вот он
Неправильный ответ

Код AS3:

super.init(myParam)

А вот это - правильный ответ


Ура!!! - мой тысячный пост =)
готов принимать поздравления

i.o. 12.09.2010 10:13

я вот честно не понял, почему суперкласс вообще зависит от наследуемого?
Суперклас должен быть независим, а крутить все что нужно должен уже наследуемый.

3p.station 12.09.2010 14:19

всем спасибо! gloomyBrain - принимайте поздравления, 1к это не три скрипта ***сать :moder: спасибо за ответы, идеи и предложения!

теперь по порядку:
то in4core
я имею ввиду что класс subMyObject я буду использовать просто гдето в моем приложении (тоесть вообще не свзяанным с MyObject)

наврно стоит подробнее описать то что я делаю

реализация "резины": у меня есть объекты котороых объеденяет то что они должны менять свое положение в зависимости от размеров сайта и потом менять свои координаты если бразузер ресайзится. Вот и я подумал что хоть гдето впервые в жизни можно использовать наследование :rolleyes: вот и создаю базовый класс в котором описываю "общее" поведение для всех объектов что будут на сайте! потом создаю собственно сами объекты-классы и расширяю их базовым (и передаю через super.init параметры типа позиции горизонтали и вертикали) вот! но чегото подумал что можно без инита обойтись и решил спросить

i.o вот у меня как то выходит что зависит, - в зависимости от параметров которые заданы для суб-класса , супер класс ведет себя по разному (но случаев не мгого всего 6, а объектов может быть много поэтому и решил использовать наследование)

спаисбо за ответы!

i.o. 12.09.2010 14:42

тогда правильно использовать super.init, т.к суперкласс не зависит в этом случае от наследуемого.

gloomyBrain, поздравляю! :drinks:)

expl 12.09.2010 20:33

Помоему, это канонический случай "Шаблонного метода" (довольно часто используется, т.е. метод родителя делегирует часть своих обязанностей потомкам - в данном примере это конструктор и делегирует он всего навсего определение значения "myParam"):

Код AS3:

package  {
 
        public class MyObject extends Sprite{
                protected function getMyParam():String
                {
                        return "My default parameter";
                }
                public function MyObject() {
                          trace (getMyParam());
                }
        }
}
 
 
package  modules{
 
        public class SubMyObject extends MyObject{
                override protected function getMyParam():String
                {
                        return "Hello";
                }
 
                public function SubMyObject()
                {
                }//end constructor
        }
}

При создании SubMyObject будет выведено "Hellow".

3p.station 12.09.2010 22:55

да, спасибо - override - замечательная возможность

etc 13.09.2010 12:08

Цитата:

Сообщение от gloomyBrain (Сообщение 935182)
Ура!!! - мой тысячный пост =)
готов принимать поздравления

слабак

gloomyBrain 13.09.2010 12:15

*надулся, встал в закрытую позу и делает вид что ему все равно*


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

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