Главная > Java | Java labs > Доступ к данным из различных экземпляров одного класса

Доступ к данным из различных экземпляров одного класса

17.04.2012 2 комментария » Просмотры: 2 264
 

В Java экземпляры одного класса имеют доступ к полям друг друга. Это может стать интересной проблемой, особенно для новичков. Пример под катом.

Вот такой пример:

Результат выполнения:

Как видите, объект Vasya, не только может читать приватные свойства объекта Boss, но так же может и менять их!!! Красота! 🙂

Мне на ум сразу пришла мысль, передать копию объекта, например так:

Результат работы теперь тот, который я бы хотел ожидать:

Еще один тест, аналогичный первому, только с экземплярами потомков этого класса:

Результат, такой же как и в первом случае:

и еще один пример:

Результат:

Как видите, в этом случае мне пришлось поменять модификаторы доступа к переменным в родительском классе с private на protected, т.к. наследуемый класс не имеет доступа к private переменным родительского класса. А так же я переопределил equals.

Выводы:

  • Нужно всегда помнить, что различные экземпляры одного класса имеют доступ ко всем методам и полям друг друга!
  • Потомки имеют доступ ко всем методам родительского класса, если метод наследуется из родителя!
  • Потомки не имеют доступ к приватным методам родительского класса, при доступе к ним из класса наследника!
  • В случае если нужно передать объект и его надо защитить, то нужно передавать его копию!

Автор: | Теги: , ,

Важно

У нас заработал ФОРУМ. Все вопросы, которые не касаются статьи, а так же вопросы по конкретно вашему случаю нужно задавать и обсуждать именно там, в разделе "Помощь пользователям".

2 комментария

Написать свой
  1. Евгений Ответить
    11.03.2016 в 3:40 пп
    В этом случае ничего у вас не выйдет. А в вашем примере protected используется как по-умолчанию, да и все.
  2. Евгений Ответить
    11.03.2016 в 3:37 пп
    пример с protected будет интереснее, если родителя и детенка разнести по разным пакаджам.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Разрешены HTML-теги: <a>, <code>, <i>, <em>, <strong>, <b>, <u>, <strike>