2013-05-27 6 views
25

Я заметил, что если не писать public перед классом его работы такие же, как public class. Я не понимаю, почему так? Он должен показывать ошибку, если я не объявляю класс как public, private или protected. Но он отлично работает. Какова причина?В чем разница между «public class» и «class»?

+1

[Это предоставит вам адекватный ответ.] (Http://stackoverflow.com/a/16728381/1079354) – Makoto

+0

Вы можете ссылаться на эту ссылку , предоставляя те же самые знания: http://stackoverflow.com/questions/614818/what-is-the-difference-between-public-private-protected-and-nothing/614844#614844 – Deepak

ответ

24

public, protected и private - модификаторы доступа. Публикация означает, что к объекту может быть доступен любой класс, защищенный подклассом, закрытый самим классом, ни один модификатор не означает «защищенный пакет», поэтому к объекту могут обращаться классы из одного и того же пакета.

Тема - это класс, метод, переменная-член.

28

Я заметил, что, если вы не публикуете публикацию перед классом, его работы аналогичны публичному классу.

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

Для получения более подробной информации вы должны прочитать Java Language Specification section 6.6 и Java Tutorial (Controlling Access to Members of a Class).

4

Классы package private по умолчанию (как указано here), поэтому он не ведет себя одинаково. Вы просто думаете, что это потому, что вы не пытались использовать свой класс из другого пакета.

0

Для деклараций классов только два В комплекте ключевые слова:

  • общественного .example: общественный класс Student {// ...}
  • частный пакет (по умолчанию) .example: класс Примечание {// ...}. Это видно только в его пакете.

Вы можете использовать частные и защищенные только в том случае, если вы объявите член внутри класса. Пример:

public class Student{ 
protected Note note; 
} 
0

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

Что-то подобное,

default class Student{} 
1

Там должен быть только один публичный класс в .java исходный файл и имя файла должно совпадать с этим общим классом.

Аналогичный вопрос задан раньше на SO. here

0

Он работает так же, только потому, что вы работаете только с одним файлом и в одном пакете.

Если у вас более одного пакета, то у вас есть проблема. Класс, который не имеет «public» перед именем класса, не может быть создан в другом пакете. Вы не можете использовать его конструктор.Вы просто не можете получить к нему доступ за пределами пакета, в который был создан класс.

Смежные вопросы