Этот вопрос относится к тому, где классы сами (а не их методы или данные) должны быть объявлены публичными.Когда «общедоступно» необходимо в определении класса?
В настоящее время я являюсь Java noob, сам преподавал только с самой базой. Я знаком с несколькими другими языками, но в Java я написал исключительно базовые программы, например, со всеми в одном основном классе (один файл).
Итак, сегодня я решил попробовать что-то новое и поместить классы в отдельные файлы. Меня удивило то, что когда я помещал класс в отдельный файл, этот класс был доступен для основной программы, даже если он не был помечен как «общедоступный».
Ради определенного примера, скажем, у меня есть всего два файла в одной папке. Файл «mainprog.java», содержащий следующее:
class mainprog {
public static void main(String[] args) {
hello myHello = new hello();
myHello.sayHello();
}
}
И файл «hello.java» не содержащий следующее:
class hello {
void sayHello() {
System.out.println("Hello world");
}
}
Ничто в «привет» определяется как общественности, но это компилируется и работает просто отлично с
javac mainprog.java
java mainprog
Так что я просто удивляюсь, где «общедоступные» действительно необходимы для определения классов?
EDIT для добавления новой информации По предложению ответов ниже, я попытался добавить «пакет» заявление каждый файл, таким образом, чтобы сделать их из разных пакетов. Как и ожидалось, доступ к классу «привет» был тогда отказано, если я не сделал как класс «привет», и это метод «SayHello() общественности. Спасибо всем.
Публичные классы видны * за пределами упаковки * они объявлены в –
http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html –