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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Пакеты и наследование 
V
    Опции темы
4EJIOBEK
Дата 31.12.2009, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Нет имелось ввиду, что использовать protected поля напрямую нежелательно(если объявление класса и использование его protected поля находятся в пределах одного пакета). И совсем запрещено(разных пакетах) для того, чтоб не было возможности у классов имеющих одного предка(но находящихся в разных пакетах) менять состяние друг друга.

Цитата

немного не улавливаю смысл, если я в классе В изменю значение i то что получится? что эта переменная измениться в классе А, и изменится во всех подклассах?

нет, если, конечно, это поле не объявлено статическим

PM MAIL ICQ   Вверх
LSD
Дата 31.12.2009, 12:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(Christoph @  30.12.2009,  17:32 Найти цитируемый пост)
немного не улавливаю смысл, если я в классе В изменю значение i то что получится? что эта переменная измениться в классе А, и изменится во всех подклассах? И что будет если я изменю переменную i в классе В? И почему я не могу изменить Z классе, через объект В изменить перемееную? простите
Или же имелось ввиду что только класс В может менять protected перемееную, и никто больше......?

1. Есть static и не static переменные. static переменная принадлежит классу и одна на все экземпляры класса, и даже если нет ни одного экземпляра класса, static переменная все равно есть. Не static переменная принадлежит конкретному объекту и не существует без этого объекта и у каждого объекта своя переменная. К static переменным обращаются через имя класса: ИмяКласса.имяПеременной, к не static обращаются через ссылку на конкретный объект ссылка.имяПеременной. В этом коде:
Код

public class A
{
  private static String str;
  private int i;
  
  public void foo()
  {
    System.out.println("str = " + str);
    i++;
  }
}

обращения к str и i компилятор неявно заменяет на A.str и this.i. Дело в том, что любой не static метод имеет ссылку this, а static - нет. И поэтому обратится к не static переменной из static метода, без явного указания ссылки, нельзя. Аналогичная ситуация и с методами и классами.


2. Есть модификаторы доступа которые определяют какой код может, а какой нет обращаться к данной переменной/методу/классу. Модификаторы бывают private, <defailt>, protected, public (в порядке убывания строгости). Модификаторы доступа не зависят от того это static переменная/метод/класс или нет.


Чтобы можно было обратится к переменной надо чтобы были выполнены оба пункта. В твоем первом примере пункт 1 выполнен, т.к. при обращении ты указал ссылку на объект ( ob1 ), а вот пункт 2 нет. Почему нет, я подробно расписал в своем первом посте.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

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

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


 




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


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

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