Функциональная сфера класса AS3 - PullRequest
1 голос
/ 20 мая 2009

Если у меня есть 2 класса и первый расширяет второй, как второй класс может вызывать статическую функцию из первого?


package p1 {
    class a {
        static function a1() {
            //do soemthing
        }
    }

    class b extends a {
        static function b1() {
            //do something else
        }
    }
}

a.a1(); // this works
b.a1(); // this doesn't work
b.b1(); //this works

Ответы [ 2 ]

2 голосов
/ 20 мая 2009

Когда «B расширяет A» - это на самом деле не то же самое, что «класс B имеет все методы и свойства A». Не класс, а объект класса B реализует все свойства и методы, определенные в классе A. Когда вы вызываете статический метод или свойство - вы имеете дело с классами, но не с объектами (это очень похоже на использование пространств имен).

ДОБАВЛЕНО: Единственный способ решить вашу задачу - переопределить a1 (args) в классе B и вызвать super.a1 (args) внутри ... 1 строки кода. Но мне кажется, что у вас есть проблема с разработчиком программного обеспечения, если невозможно избежать такого рода использования.

0 голосов
/ 20 мая 2009

Используйте super для вызова родительского метода.

super.b1();

РЕДАКТИРОВАТЬ: Хорошо, глядя на то, что вы написали, я думаю, вам нужно установить область a1, чтобы быть публичным или защищенным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...