Форум программистов, компьютерный форум, киберфорум
Java
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/18: Рейтинг темы: голосов - 18, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 04.05.2016
Сообщений: 17
1

Смысл private

28.07.2016, 18:44. Показов 3372. Ответов 17

Author24 — интернет-сервис помощи студентам
Допустим я создал переменную a. Зачем мне её делать приватной если я её смогу просто не использовать за пределами класса?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.07.2016, 18:44
Ответы с готовыми решениями:

Set и private
Всем привет, подскажите пожалуйста логику: вот мы создаем к примеру переменную класса, пусть будет...

Примитив private из потомка
Есть ли возможность получить переменную private описанную в предке из потомка напрямую, без...

package private class
Как сделать класс, чтобы он был только в пределах видимости пакета (папки), в которой он лежит?

Private поля в классе
Здравсвуйте! Начинаю изучать Java и не могу понять зачем в примерах пишут, что нужно делать, по...

17
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
28.07.2016, 18:57 2
Лучший ответ Сообщение было отмечено topaz как решение

Решение

Затем, чтобы ты не смог, даже если очень захочешь, использовать ее за пределами класса. Или не ты, а кто-то другой.
1
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
Цитата Сообщение от topaz Посмотреть сообщение
Зачем мне её делать приватной
Если ты не работаешь в команде, и твои поделки не предполагается использовать кем-то другим - не имеет значения.
Иначе приватными делают те поля, которые либо нужны только как локальные для объекта, либо содержат информацию\метод, который не должен быть вызван отдельно.
Иначе это может повлечь за собой создание уязвимостей.
Представь что твой класс криптует, а в его свойствах описан алгоритм. Причем последовательность вызова свойств важна. Если ты промежуточные свойства оставишь в паблике, нечистый помыслами хакер может просто их использовать так, чтоб твой алгоритм поломать, сделав последовательность вызовов криптосистемы (твоей) другим, и тем самым зашифровнное уже может быть неверно расшифровано на другой стороне, где порядок вызова авторский.
0
Эксперт Java
2398 / 2223 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
28.07.2016, 19:24 5
Цитата Сообщение от Hikari Посмотреть сообщение
нечистый помыслами хакер может просто их использовать так, чтоб твой алгоритм поломать
их можно без проблем использовать невзирая на модификатор доступа. Модификаторы не созданы чтобы что-то от кого то скрыть\защитить. Они лишь направляют программиста в нужное русло парадигмы инкапсуляции.
0
Хитрая блондиночка $)
1472 / 988 / 399
Регистрация: 21.12.2015
Сообщений: 3,785
28.07.2016, 20:40 6
Цитата Сообщение от KEKCoGEN Посмотреть сообщение
их можно без проблем использовать невзирая на модификатор доступа.
Я удивлена.
Расскажи как. Плиз.
0
944 / 687 / 230
Регистрация: 28.04.2013
Сообщений: 1,926
28.07.2016, 21:14 7
Цитата Сообщение от Hikari Посмотреть сообщение
Расскажи как. Плиз.
Получить доступ к приватному полю можно используя рефлексию, в гугле полно примеров
0
Хитрая блондиночка $)
1472 / 988 / 399
Регистрация: 21.12.2015
Сообщений: 3,785
29.07.2016, 06:06 8
Цитата Сообщение от reisal78 Посмотреть сообщение
можно используя рефлексию
Я об этом только слышала. Тогда и я не понимаю в чем смысл привата, если он обходится. По крайней мере в Яве.
0
Эксперт Java
2398 / 2223 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
29.07.2016, 10:06 9
Цитата Сообщение от Hikari Посмотреть сообщение
Тогда и я не понимаю в чем смысл привата
выше написал
0
944 / 687 / 230
Регистрация: 28.04.2013
Сообщений: 1,926
29.07.2016, 10:19 10
Цитата Сообщение от Hikari Посмотреть сообщение
Тогда и я не понимаю в чем смысл привата, если он обходится.
Смысл в сокрытии реализации. Допустим я попросил вас разработать класс, который должен сохранять и выдавать какие то данные. Вы для меня делаете несколько публичных методов save, delete и тд. в процессе создания этого класса вам скорее всего понадобится создать какие то дополнительные вспомогательные поля и методы. Но мне, как конечному пользователю вашего класса о них знать не обязательно. Мне от вашего класса нужны будут только методы save delete get и тд. а как это у вас все работает и куда все это сохраняется мне не важно. В тоже время если вы мне предоставите по ошибке возможность изменить какое то ваше вспомогательное поле, то это может нарушить логику работы вашего класса, поэтому все вспомогательное, что нужно для работы вашего класса вам нужно спрятать за приватами. Конечно же я могу получить через рефлексию доступ к спрятанному... вот только зачем мне это нужно?
0
Хитрая блондиночка $)
1472 / 988 / 399
Регистрация: 21.12.2015
Сообщений: 3,785
29.07.2016, 12:13 11
Цитата Сообщение от KEKCoGEN Посмотреть сообщение
выше написал
Однако:
Цитата Сообщение от reisal78 Посмотреть сообщение
Конечно же я могу получить через рефлексию доступ к спрятанному... вот только зачем мне это нужно?
Раз этоне исключается, значит сама концепция сокрытия летит в тартар. Или я преувеличиваю?
Мне, как адепту Вирта, такая вот вольность типа рефлексии пока непонятна.
0
Эксперт Java
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
Цитата Сообщение от Hikari Посмотреть сообщение
Раз этоне исключается, значит сама концепция сокрытия летит в тартар. Или я преувеличиваю?
Вот вы приобрели автомобиль. Что бы на нем поехать вам нужно залить в него топливо, и выполнить еще ряд каких то действий. Но ведь не исключается возможность залить в бак, скажем, подсолнечное масло но это же не означает что концепция использования автомобиля "летит в тартар"

Добавлено через 3 минуты
Да, я могу с помощью рефлексии изменять приватные поля вашего класса, но это с большой вероятностью испортит работу вашего класса, поэтому обычно этим никто не занимается
0
Хитрая блондиночка $)
1472 / 988 / 399
Регистрация: 21.12.2015
Сообщений: 3,785
29.07.2016, 14:24 14
Цитата Сообщение от reisal78 Посмотреть сообщение
Что бы на нем поехать вам нужно залить в него топливо
Я бы по другому описала: Приватными в авто считается насос, и цилиндр. Я не могу туда капнуть бензинчика пипеткой, а использую для этого бензобак. Однако я могу обойти бензобак поставив другую суперпуперрасчудесную топливную систему (или та же газ-система). Так?
Так вот тогда возникает вопрос: Зачем делали рефлексию в Яве, если смысла применять ее нет, если это выстрел себе в ухо?

Короче проехали... Ойвсе. Я все равно не пойму зачем обходить бензобак, если все равно лучше не станет.
0
Эксперт Java
2398 / 2223 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
29.07.2016, 14:38 15
Цитата Сообщение от Hikari Посмотреть сообщение
Зачем делали рефлексию в Яве, если смысла применять ее нет
то что вы не видите способов её применения не значит что их нет. Рефлексию не оправдано применять именно для получения доступа к прайвет полям \ методам (да и то не всегда). Все инструменты языка надо использовать там, где они подходят. Есть суп вилкой тоже можно, но не удобно.

Хватит оффтопа. Если хотите обсудить рефлексию и все такое, создайте для этого отдельную тему.
0
944 / 687 / 230
Регистрация: 28.04.2013
Сообщений: 1,926
29.07.2016, 14:43 16
Цитата Сообщение от Hikari Посмотреть сообщение
Зачем делали рефлексию в Яве, если смысла применять ее нет, если это выстрел себе в ухо?
Если требуется применять рефлексию, то скорее всего неправильная архитектура приложения.
Но с другой стороны...
Например: У вас есть 100+ классов сущностей

Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    class User{
        private String name;
        private int age;
 
        public String getName() {
            return name;
        }
 
        public void setName(String name) {
            this.name = name;
        }
 
        public int getAge() {
            return age;
        }
 
        public void setAge(int age) {
            this.age = age;
        }
    }
и подобных еще 100 классов

и вам объекты этих классов нужно сохранять в БД, из "инструментов" голый jdbc...
можно создать 100 методов, а можно с помощью рефлексии создать один универсальный метод.
0
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
29.07.2016, 14:50 17
Цитата Сообщение от reisal78 Посмотреть сообщение
и вам объекты этих классов нужно сохранять в БД, из "инструментов" голый jdbc...
можно создать 100 методов, а можно с помощью рефлексии создать один универсальный метод.
И нагнется это добро медным тазом )
0
Хитрая блондиночка $)
1472 / 988 / 399
Регистрация: 21.12.2015
Сообщений: 3,785
29.07.2016, 15:29 18
Цитата Сообщение от KEKCoGEN Посмотреть сообщение
Если хотите обсудить рефлексию и все такое, создайте для этого отдельную тему.
Нет. Не хочу. Я ее не пойму все равно.
Проехали...
0
29.07.2016, 15:29
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.07.2016, 15:29
Помогаю со студенческими работами здесь

Тестирование private or protected метода
Добрый день! У меня есть класс, который выполняет тестирование при помощи библиотеки mockito,...

private fields: возможно ли узнать их значение?
С помощью java.lang.reflect смог докопаться до значений полей класса. Однако получается, что не до...

Доступ к private-данным одного класса из другого
Как получить доступ к private данных одного класса в другом? В принципе нельзя. Но можешь всеже...

Как создать private class?
Если я делаю просто class{} то все норм. Но когда я добавляю privat class{}, то мне в ответ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru