Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> проблемы с обласью видимости 
V
    Опции темы
Klio
Дата 14.8.2011, 01:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 111
Регистрация: 18.4.2008
Где: Харьков - СС_3

Репутация: нет
Всего: 1



Здравствуйте господа программисты
Помогите с решением проблемы...
- Есть в пакете класс A, (к примеру):
Код
package bla.bla
public class A{
  private boolean enabled;
  public boolean getEnabled(){return enabled;}
  public void setEnabled(boolean e){enabled=e;}
}

Кроме этого в пакете есть класс С
Код
package bla.bla
public final class C{
  private ArrayList list;
  private static C instance=null;
  private C(){}
  public static C getC(){
    if (instance==null){instance=new C();} //для создания лишь одного экземпляра класса С 
    return instance;                                     //(причин для этого много)
  }
  public void To(ArrayList list){........}
  public void runn(){.....}
}

в этом пакете есть класс B испльзующий параметры и методы класса A и С
Код
package bla.bla
public class B{
  private ArrayList<A> list;
  public void activate(int i){
    list.get(i).setEnabled(true);
    С ссс=C.getC();
    ccc.To(list);
    ccc.runn();
  }
}

1)Как можно защитить класс A, а точнее метод setEnabled чтобы его можно использовать из данного пакета, и если вообще возможно то только из класса B метода activate
2)И что возможно сделать чтобы класс С можно было использовать только в этом пакете и больше ни где (изменение на private или protected приводит к ошибкам)
P.S.:  до этого использовал переменные public и private, а классы только public. хоть и читал некоторую документацию по данному вопросу, всё равно часть не понял...
Заранее спасибо!!!

Это сообщение отредактировал(а) Klio - 14.8.2011, 13:13
PM MAIL ICQ   Вверх
dorogoyIV
Дата 14.8.2011, 02:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

Репутация: 3
Всего: 46



Цитата(Klio @  14.8.2011,  01:02 Найти цитируемый пост)
1)Как можно защитить класс A, а точнее метод setEnabled чтобы его можно использовать из данного пакета, и если вообще возможно то только из класса B метода activate

сделать класс В вложенным
Код

class A
{
 A()
 {
  ...
 }

 private void setEnabled(boolean b)
 {
  ...
 }

 class B
 {
  B()
  {
   ...
   list.get(index).setEnabled(true); // здесь есть доступ к приватным членам класса А
  }
 }
}


ой, забыл написать как обращаться к нему...
Код

 new A().new B();


Это сообщение отредактировал(а) dorogoyIV - 14.8.2011, 05:56
PM MAIL   Вверх
Farmazon
Дата 14.8.2011, 09:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Разработчик
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 7.7.2006

Репутация: 1
Всего: 5



 smile  Можно через Thread.getStackTrace узнать вызывающий тебя метод и класс и выкинуть исключение  smile 


--------------------
Таково моё общее мнение.
PM MAIL WWW   Вверх
Klio
Дата 14.8.2011, 13:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 111
Регистрация: 18.4.2008
Где: Харьков - СС_3

Репутация: нет
Всего: 1



dorogoyIV и Farmazon спасибо вам большое
Первый вариант интересен в реализации, до этого я использовал по одному классу в каждом *.java файле
Второй вариант тоже очень хороший, в дальнейшей разработке пригодится не один раз!!!

При попытке реализовать первый вариант, по случайности обнаружил более обобщённый вариант реализации:
1) объявление класса C 
Код

final class C{...}

2) объявление метода
Код

  boolean getEnabled(){return enabled;}

Если опускать объявление области видимости в классах, методах и переменных - то их использование ограничивается пакетом в котором они находятся...
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0449 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.