Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 20.09.2009, 19:38
TommyLee вне форума Посмотреть профиль Отправить личное сообщение для TommyLee Найти все сообщения от TommyLee
  № 1  
Ответить с цитированием
TommyLee

Регистрация: Sep 2009
Сообщений: 130
По умолчанию Модификаторы доступа - вопрос по примеру из Мука

Привет.
Код AS3:
package zoo{
   public class VirtualZoo{
            public function VirtualZoo() {
                                    new VirtualPet(); 
            }
   }
}  
 
package zoo{
   internal class VirtualPet{
              public function VirtualPet(){}
   }
}
1. паблики в VirtualZoo понятны. Непонятно: public в function VirtualPet(). По умолчанию он internal, но даже с таким модификатором он доступен VirtualZoo. Так зачем же писать public? Так он становится доступным любому классу из любых пакетов.

2. Класс - internal с методом public. Будет ли доступен такой метод из других пакетов?


Последний раз редактировалось TommyLee; 20.09.2009 в 19:43.
Старый 20.09.2009, 19:46
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 2  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
1. конструктор в AS3 обязан быть публичным.
2. internal во втором случае для проформы. И указание пакета там вообще не нужно. Этот класс все равно попадет в приватный неймспейс первого (и единственного) публичного класса в этом файле.
3. Все что угодно c модификатором доступа internal ни при каких обстоятельствах не будет доступно в других пакетах. Очевидно, internal записывает имя пакета, так что, даже если вы отнаследуетесь от класса объявившего internal метод или свойство в другом пакете, это свойство / метод будет вам не доступно в классе-наследнике.
__________________
Hell is the possibility of sanity

Старый 20.09.2009, 19:46
Kuruki вне форума Посмотреть профиль Отправить личное сообщение для Kuruki Найти все сообщения от Kuruki
  № 3  
Ответить с цитированием
Kuruki

Регистрация: Jan 2008
Сообщений: 669
1. По умолчанию всегда и везде public
2. Вы не сможете создать экземпляр internal класса из другого пакета, следовательно не сможете обратиться к его методам

UPD: 1. Ну по крайней мере для переменных и функций . Думал, что и для классов. В любом случае лучше всегда конкретно объявлять


Последний раз редактировалось Kuruki; 20.09.2009 в 19:55.
Старый 20.09.2009, 20:15
BlooDHounD вне форума Посмотреть профиль Отправить личное сообщение для BlooDHounD Посетить домашнюю страницу BlooDHounD Найти все сообщения от BlooDHounD
  № 4  
Ответить с цитированием
BlooDHounD
стервочка (я мужик)
 
Аватар для BlooDHounD

блогер
Регистрация: Mar 2004
Адрес: Борисов
Сообщений: 3,161
Записей в блоге: 22
Kuruki, по умолчанию всегда internal.

Старый 20.09.2009, 20:30
TommyLee вне форума Посмотреть профиль Отправить личное сообщение для TommyLee Найти все сообщения от TommyLee
  № 5  
Ответить с цитированием
TommyLee

Регистрация: Sep 2009
Сообщений: 130
Цитата:
Сообщение от Kuruki Посмотреть сообщение
1. По умолчанию всегда и везде public
да, по умолчанию всегда internal, иначе бы в главном классе не нужно было обязательно писать public, да и в конструкторе главного класса... Про то, что public нужно писать и в конструкторах "не главных" классов (хоть они и в одном пакете с вызывающим их "главным" классом) - не знал, у автора не слова, а я голову ломал - думал упустил чего

по поводу второго вопроса. Я так понял, если класс internal, то его паблик метод из другого пакета не вызовешь?

Старый 20.09.2009, 22:27
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 6  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
>> по поводу второго вопроса. Я так понял, если класс internal, то его паблик метод из другого пакета не вызовешь?
Если вы как-нибудь получите ссылку на объект этого класса в другом пакете - то вполне даже вызовете, а если метод будет internal - то нет.
__________________
Hell is the possibility of sanity

Старый 21.09.2009, 00:29
Kuruki вне форума Посмотреть профиль Отправить личное сообщение для Kuruki Найти все сообщения от Kuruki
  № 7  
Ответить с цитированием
Kuruki

Регистрация: Jan 2008
Сообщений: 669
Цитата:
по умолчанию всегда internal
D'oh!
Действительно

Старый 21.09.2009, 18:46
TommyLee вне форума Посмотреть профиль Отправить личное сообщение для TommyLee Найти все сообщения от TommyLee
  № 8  
Ответить с цитированием
TommyLee

Регистрация: Sep 2009
Сообщений: 130
Цитата:
Сообщение от wvxvw Посмотреть сообщение
Если вы как-нибудь получите ссылку на объект этого класса в другом пакете - то вполне даже вызовете, а если метод будет internal - то нет.
Понял, спасибо.
Вопросов по теме нет.

Создать новую тему Ответ Часовой пояс GMT +4, время: 01:49.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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