0 / 0 / 0
Регистрация: 04.05.2016
Сообщений: 17
|
|
1 | |
Смысл private28.07.2016, 18:44. Показов 3372. Ответов 17
Допустим я создал переменную a. Зачем мне её делать приватной если я её смогу просто не использовать за пределами класса?
0
|
28.07.2016, 18:44 | |
Ответы с готовыми решениями:
17
Set и private Примитив private из потомка package private class Private поля в классе |
0 / 0 / 0
Регистрация: 04.05.2016
Сообщений: 17
|
|
28.07.2016, 19:04 [ТС] | 3 |
Спасибо.
0
|
Хитрая блондиночка $)
1472 / 988 / 399
Регистрация: 21.12.2015
Сообщений: 3,785
|
|
28.07.2016, 19:11 | 4 |
Если ты не работаешь в команде, и твои поделки не предполагается использовать кем-то другим - не имеет значения.
Иначе приватными делают те поля, которые либо нужны только как локальные для объекта, либо содержат информацию\метод, который не должен быть вызван отдельно. Иначе это может повлечь за собой создание уязвимостей. Представь что твой класс криптует, а в его свойствах описан алгоритм. Причем последовательность вызова свойств важна. Если ты промежуточные свойства оставишь в паблике, нечистый помыслами хакер может просто их использовать так, чтоб твой алгоритм поломать, сделав последовательность вызовов криптосистемы (твоей) другим, и тем самым зашифровнное уже может быть неверно расшифровано на другой стороне, где порядок вызова авторский.
0
|
2398 / 2223 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
|
|
28.07.2016, 19:24 | 5 |
их можно без проблем использовать невзирая на модификатор доступа. Модификаторы не созданы чтобы что-то от кого то скрыть\защитить. Они лишь направляют программиста в нужное русло парадигмы инкапсуляции.
0
|
Хитрая блондиночка $)
1472 / 988 / 399
Регистрация: 21.12.2015
Сообщений: 3,785
|
|
28.07.2016, 20:40 | 6 |
0
|
944 / 687 / 230
Регистрация: 28.04.2013
Сообщений: 1,926
|
|
28.07.2016, 21:14 | 7 |
Получить доступ к приватному полю можно используя рефлексию, в гугле полно примеров
0
|
Хитрая блондиночка $)
1472 / 988 / 399
Регистрация: 21.12.2015
Сообщений: 3,785
|
|
29.07.2016, 06:06 | 8 |
Я об этом только слышала. Тогда и я не понимаю в чем смысл привата, если он обходится. По крайней мере в Яве.
0
|
2398 / 2223 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
|
|
29.07.2016, 10:06 | 9 |
0
|
944 / 687 / 230
Регистрация: 28.04.2013
Сообщений: 1,926
|
|
29.07.2016, 10:19 | 10 |
Смысл в сокрытии реализации. Допустим я попросил вас разработать класс, который должен сохранять и выдавать какие то данные. Вы для меня делаете несколько публичных методов save, delete и тд. в процессе создания этого класса вам скорее всего понадобится создать какие то дополнительные вспомогательные поля и методы. Но мне, как конечному пользователю вашего класса о них знать не обязательно. Мне от вашего класса нужны будут только методы save delete get и тд. а как это у вас все работает и куда все это сохраняется мне не важно. В тоже время если вы мне предоставите по ошибке возможность изменить какое то ваше вспомогательное поле, то это может нарушить логику работы вашего класса, поэтому все вспомогательное, что нужно для работы вашего класса вам нужно спрятать за приватами. Конечно же я могу получить через рефлексию доступ к спрятанному... вот только зачем мне это нужно?
0
|
Хитрая блондиночка $)
1472 / 988 / 399
Регистрация: 21.12.2015
Сообщений: 3,785
|
|
29.07.2016, 12:13 | 11 |
Однако:
Раз этоне исключается, значит сама концепция сокрытия летит в тартар. Или я преувеличиваю? Мне, как адепту Вирта, такая вот вольность типа рефлексии пока непонятна.
0
|
2398 / 2223 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
|
|
29.07.2016, 13:25 | 12 |
Hikari, концепция сокрытия это концепция. Она дает вам преимущества и хороший код. Хотите писать плохой код, можете не следовать этой концепции. Никто вас не заставляет.
0
|
944 / 687 / 230
Регистрация: 28.04.2013
Сообщений: 1,926
|
|
29.07.2016, 14:00 | 13 |
Вот вы приобрели автомобиль. Что бы на нем поехать вам нужно залить в него топливо, и выполнить еще ряд каких то действий. Но ведь не исключается возможность залить в бак, скажем, подсолнечное масло но это же не означает что концепция использования автомобиля "летит в тартар"
Добавлено через 3 минуты Да, я могу с помощью рефлексии изменять приватные поля вашего класса, но это с большой вероятностью испортит работу вашего класса, поэтому обычно этим никто не занимается
0
|
Хитрая блондиночка $)
1472 / 988 / 399
Регистрация: 21.12.2015
Сообщений: 3,785
|
|
29.07.2016, 14:24 | 14 |
Я бы по другому описала: Приватными в авто считается насос, и цилиндр. Я не могу туда капнуть бензинчика пипеткой, а использую для этого бензобак. Однако я могу обойти бензобак поставив другую суперпуперрасчудесную топливную систему (или та же газ-система). Так?
Так вот тогда возникает вопрос: Зачем делали рефлексию в Яве, если смысла применять ее нет, если это выстрел себе в ухо? Короче проехали... Ойвсе. Я все равно не пойму зачем обходить бензобак, если все равно лучше не станет.
0
|
2398 / 2223 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
|
|
29.07.2016, 14:38 | 15 |
то что вы не видите способов её применения не значит что их нет. Рефлексию не оправдано применять именно для получения доступа к прайвет полям \ методам (да и то не всегда). Все инструменты языка надо использовать там, где они подходят. Есть суп вилкой тоже можно, но не удобно.
Хватит оффтопа. Если хотите обсудить рефлексию и все такое, создайте для этого отдельную тему.
0
|
944 / 687 / 230
Регистрация: 28.04.2013
Сообщений: 1,926
|
||||||
29.07.2016, 14:43 | 16 | |||||
Если требуется применять рефлексию, то скорее всего неправильная архитектура приложения.
Но с другой стороны... Например: У вас есть 100+ классов сущностей Кликните здесь для просмотра всего текста
и вам объекты этих классов нужно сохранять в БД, из "инструментов" голый jdbc... можно создать 100 методов, а можно с помощью рефлексии создать один универсальный метод.
0
|
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
|
|
29.07.2016, 14:50 | 17 |
0
|
Хитрая блондиночка $)
1472 / 988 / 399
Регистрация: 21.12.2015
Сообщений: 3,785
|
|
29.07.2016, 15:29 | 18 |
0
|
29.07.2016, 15:29 | |
29.07.2016, 15:29 | |
Помогаю со студенческими работами здесь
18
Тестирование private or protected метода private fields: возможно ли узнать их значение? Доступ к private-данным одного класса из другого Как создать private class? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |