Руководство по actionscript. часть 3, стр. 011
В каждой области видимости ActionScript неявно открывает подходящее пространство имен для различных модификаторов управления доступом. Например, в каждой области видимости всегда добавляется глобальное пространство имен public в набор открытых пространств имен. На верхнем уровне пакета также добавляются пространства имен internal и publ ic данного пакета. В коде класса, который находится внутри пакета, также добавляются пространства имен private и protected данного класса. Таким образом, набор открытых пространств имен включает не
только пространства имен, открытые пользователем, но и пространства имен для управления доступом, которые неявно открываются в каждой области видимости.
Открыть пространства имен для управления доступом явно с помощью директивы use namespace невозможно. Среда выполнения открывает пространства имен для управления доступом автоматически, в соответствии с текущей областью видимости.
Пространства имен для модификаторов управления доступом определяют доступность идентификаторов и предотвращают конфликты именования. Например, в следующем коде суперкласс Parent и подкласс Child определяют переменную с одним и тем же именем, используя модификатор управления доступом private: description. Переменная description класса Parent недоступна для кода в классе Child, поскольку она уточнена пространством имен private класса Parent, которое не открывается в области видимости класса Child. Благодаря этому названия переменных не конфликтуют между собой.
package р { public class Parent. { private var description-.String = «A Parent object»; public function Parent ( ) { trace(description);
}
}
package p { public class Child extends Parent { private var description:String = «A Child object»; public function Child ( ) { trace(description); // Конфликта не происходит
}
}
}
Однако если переменную description класса Parent объявить с использованием модификатора управления доступом protected, возникнет конфликт. Рассмотрим почему. Во-первых, изменим модификатор управления доступом для переменной description на protected:
public class Parent { protected var description-.String = «A Parent object»;
}
Теперь представим себя на месте среды Flash, пытающейся выполнить код в конструкторе класса Child. Мы входим в конструктор и встречаем ссылку на идентификатор description. Чтобы разрешить этот идентификатор, мы должны проверить его существование в открытых пространствах имен. И какие же пространства имен открыты в конструкторе класса Child? Как мы уже знаем, в коде класса, который находится внутри пакета, среда Flash открывает пространства имен private и protected данного класса, пространства имен internal и public пакета и глобальное пространство имен public. Итак, открытыми пространствами имен являются:
? пространство имен private класса Child;
? пространство имен protected класса Child (которое уточняет все члены, унаследованные от непосредственного суперкласса);
? пространство имен internal пакета р;
? пространство имен public пакета р;
? глобальное пространство имен public;
? все пользовательские пространства имен, открытые явным образом.