Подтвердить что ты не робот

В чем разница между "public class" и "class"?

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

4b9b3361

Ответ 1

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

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

Ответ 2

Я заметил, что если не писать public перед классом, он работает так же, как и открытый класс.

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

Вы должны прочитать раздел языка Java 6.6 и учебник по Java (Контроль доступа к членам класса) для более подробной информации.

Ответ 3

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

Ответ 4

Должен быть только один открытый класс для исходного файла .java, и имя файла должно совпадать с этим открытым классом.

Аналогичный вопрос задают раньше на SO. Пожалуйста, найдите здесь

Ответ 5

Для объявлений классов доступны только два ключевых слова:

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

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

public class Student{
protected Note note;
}

Ответ 6

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

Что-то вроде,

default class Student{}

Ответ 7

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

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

Ответ 8

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