какой смысл использовать модификатор доступа - PullRequest
3 голосов
/ 11 августа 2010

есть необходимость использовать модификатор доступа в языке программирования?если мы выберем все члены и методы как частные, каков будет результат?

Ответы [ 13 ]

6 голосов
/ 11 августа 2010

См .: Инкапсуляция (Википедия)

Конечно, вы можете объявить все члены и методы как закрытые, но тогда вы получили довольно бесполезный класс, поскольку вы не можете получить доступ к любому из них из другого класса.

4 голосов
/ 11 августа 2010

Private используется для инкапсуляции (OOP), чтобы скрыть реализацию.Публичные объявленные методы предоставляют интерфейс класса.

Если вы объявите все как закрытое, вы не сможете использовать методы из других классов.Что сделало бы класс с такими методами совершенно бесполезным.

2 голосов
/ 11 августа 2010

Я согласен, private отлично подходит для эмпирических полей.Однако модификатор private запрещает подклассам доступ к полям и методам.Если бы все методы и поля были private, подклассы не имели бы ничего общего с их суперклассами, кроме их типа.

Было бы также трудно для одного объекта быть полезным для другого, если бы не все методы были доступны.Было бы трудно написать даже экземпляр Object, если бы все методы (включая конструкторы) были приватными.

Лучший вопрос для обсуждения был бы: вне private и public, зачем нужны protected и default модификаторы доступа.

2 голосов
/ 11 августа 2010

Модификаторы доступа используются для инкапсуляции: они позволяют вам упорядочить код в пакетах и ​​классах и имеют только «официальный» открытый интерфейс, видимый снаружи, скрывая при этом детали реализации (что вы хотите сделать, чтобыпозже вы можете изменить его, не сказав никому).

Это особенно (только?) важно, когда вы выпускаете код в виде библиотеки для использования другими программистами.Даже если код используется только в вашей собственной программе, он помогает структурировать большие программы в несколько пакетов.

Делать все частным не имеет смысла, если ваша программа не состоит только из одного класса.Однако это разумное значение по умолчанию: пока вы не решите, что какой-то другой класс должен вызывать его, сделайте метод закрытым.

Модификатор по умолчанию в Java (если ничего не указано) защищен пакетами.Это позволяет получить доступ к методу или полю из вашего собственного связанного кода (то есть кода в том же пакете), но при этом скрыть его от кого-либо еще.Это также является разумным значением по умолчанию или естественным путем обновления с частного: пока код, находящийся вне пакета, не должен вызывать его, необходимо сделать метод защищенным для пакета.

Защищены более видимые уровни (подклассы могут видеть) и публике (это видят все).Прежде чем делать что-то общедоступным или защищенным, тщательно продумайте интерфейс, потому что потом его сложно изменить.

2 голосов
/ 11 августа 2010

Модификатор private указывает, что к члену можно получить доступ только в его собственном классе.

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

проверьте это: http://download.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html

2 голосов
/ 11 августа 2010

Модификаторы доступа используются для управления видимостью полей и методов. Часто у нас есть веские причины запретить использование метода или поля для объектов других классов.

Если вы только начали программировать на Java и держите весь свой собственный код в одном классе, то в конечном итоге вам могут не понадобиться другие модификаторы доступа (за исключением основного метода, у которого имеет , чтобы быть public). Модификаторы доступа начинают становиться важными, когда ваш дизайн становится объектно-ориентированным (= как только вы реализуете более одного класса).

Вот указатель на соответствующую статью в официальном руководстве по Java .

2 голосов
/ 11 августа 2010

Вам нужны модификаторы доступа, чтобы контролировать доступность методов / членов. Мораль в том, что вы должны ограничить доступ к частной жизни, насколько это возможно, но все же вы не можете сделать их всех личными.

Предположим, у вас есть служебный класс, который выполняет полезную операцию для всех классов (например, ведение журнала). В этом случае все классы должны «видеть» служебный класс и его членов. Определенно, вы не можете сделать здесь все приватным. Это только один пример из сотен.

1 голос
/ 09 ноября 2013

Все дело в доступности вашего метода класса или свойства. Я нарисовал таблицу, чтобы облегчить ее понимание.

+----------------------+----------------+-----------------+----------------------+
|Access Modifiers      | Same Package   |  Subclass       |  Other packages      |
|----------------------|----------------|-----------------|----------------------|
|public                |      Y         |       Y         |            Y         |
|                      |                |                 |                      |
|protected             |      Y         |       Y         |            N         |
|                      |                |                 |                      |
|no access modifier    |      Y         |       N         |            N         |
|                      |                |                 |                      |
|private               |      Y         |       N         |            N         |
|                      |                |                 |                      |
+----------------------+----------------+-----------------+----------------------+
1 голос
/ 11 августа 2010

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

0 голосов
/ 04 апреля 2012

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

Java, содержащая четыре спецификатора доступа,

Public
Private
Protected
Default

Java с пятью модификаторами без доступа

static
final
abstract
syncronised
volatile

Источник: Данные учебника - модификатор Java

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...