Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > ActionScript 3 > Вопрос по классам и наследованию


Автор: egoistu 2.4.2011, 17:59
Всем привет...

Не судите строго... возможно кому-то вопрос покажется нубский...

И так... имеется...

Код

public class A {
    public var b:B;
    public var c:C;

    public var t:String = 'test string';

    public function A() {
         ...
         this.b = new B;
         this.c = new C;
         ...
    }
}


public class B extends A {
    public function B() {
        trace(this.t); // Выводит "test string"
        trace(this.c); // null :(      А хотелось бы чтоб здесь был экземпляр обьекта C
    }
}


классы раскиданы по отдельным файлам...
System/A.as
System/B.as
System/C.as

у всех Package System...

начало в 1 фраме флэшки...
Код

new A(this.stage);



Вопрос...
какое различие между свойством типа String и Object...
почему первое(string) в видно из child а второе(object) нет :(
?

Спасибо за внимание ;)
Гуд лак и творческого вдохновения... smile

Добавлено через 13 минут и 48 секунд
перекурил...
понял...

различие в том что:

Код

    ...
    public var b:B;   // Не обьявлен класс
    public var t:string = 'test string';   // Обьявлена сразу...
    ...


но теперь другая проблема...
если обьявляю сразу

Код

    ...
    public var b:B = new B;
    ...


то получается бесконечный цикл :(

помогите с решением...

Автор: egoistu 2.4.2011, 18:14
Error: Error #1023: Stack overflow occurred.
    at System::A()
    at System::B()
    at System::A()
    at System::B()

Автор: KaraKum 2.4.2011, 21:23
Приветствую.
Эту проблему можно решить только если удалить этот код  smile 
Как я понимаю это пример для теста - на практике такой ситуации быть не может - получается "что первее - курица или яйцо".

Автор: egoistu 2.4.2011, 23:06
Цитата(KaraKum @ 2.4.2011,  21:23)
Приветствую.
Эту проблему можно решить только если удалить этот код  smile 
Как я понимаю это пример для теста - на практике такой ситуации быть не может - получается "что первее - курица или яйцо".

ну спасибо...
обнадёжил... smile

Автор: SoWa 3.4.2011, 07:02
Цитата(egoistu @  2.4.2011,  17:59 Найти цитируемый пост)
различие в том что:
...    public var b:B;   // Не обьявлен класс    
public var t:string = 'test string';   // Обьявлена сразу...

Нет, на самом деле класс объявлен. Но экземпляр не создается для переменной b(появляется ссылка на null), а для t создается и там лежит ссылка на String "test string".
Эта особенность должна всегда быть в голове, и в зависимости от задачи - либо сразу создавать объекты, либо попозжа.
А KaraKum прав, тут проблема курицы и яйца. Если не секрет - откуда такой код?

Автор: egoistu 3.4.2011, 12:27
Цитата(egoistu @  2.4.2011,  17:59 Найти цитируемый пост)

Но экземпляр не создается для переменной b(появляется ссылка на null), а для t создается и там лежит ссылка на String "test string"


это плохо...

Цитата

Если не секрет - откуда такой код?


сам пробовал... smile


я програмирую на PHP...
у меня есть своя мини-чмс...
она работает по такому принципу...

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

там... в PHP это отлично работает...
за счёт того что каждый модуль инициализируется только один раз
(и только если его кто-то запрашивает... там перегрузка помогает... 
если нет экземпляра, он создаётся в родителе...)
всё приложение работает очень быстро... и с минимальными затратами ресурсов

тут (в AS3) я так понял что такое не прокатит...
печально... но не страшно... сделаю по другому...
буду передавать ссылку на МЭЙН класс в конструктор...
без наследования...

просто так было-б удобнее...

...
огромное спасибо за то что просветили smile
всем удачи и много интересных и уникальных проектов ;)

Автор: SoWa 3.4.2011, 17:41
Цитата(egoistu @  3.4.2011,  12:27 Найти цитируемый пост)
буду передавать ссылку на МЭЙН класс в конструктор...

Да, известный костыль smile Но лучше придумать архитектуру так, чтобы вообще без такой штуки работать.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)