Wiele klas w jednym pliku
Umieszczanie definicji wielu klas w pojedynczym pliku nie jest zalecane, lecz może mieć uzasadnienie w przypadku prostych klas pomocniczych ściśle związanych z publiczną klasą główną (w naszym przykładze z klasą ZooAllInOneFile).
Przykład wielu klas w jednym pliku:
public class ZooAllInOneFile {
public static void main( String[] argumenty ) {
Snake snake = new Snake();
Bird bird = new Bird();
snake.introduce();
bird.introduce();
}
}
class Snake {
void introduce() {
System.out.println("I am snake.");
}
}
class Bird {
void introduce() {
System.out.println("I am bird.");
}
}
Zapisz ten kod w pliku ZooAllInOneFile.java, skompiluj ten plik i uruchom.
Zauważ, że kompilator automatycznie skompiluje klasy Snake oraz Bird, ponieważ zostały one użyte w klasie ZooAllInOneFile.
Zauważ także, że w takiej sytuacji tylko klasa ZooAllInOneFile może być zadeklarowana jako public, ponieważ tylko nazwa tej klasy jest identyczna z nazwą pliku kompilowanego pliku .java. Próba dopisania sława public przed definicją klasy Snake lub Bird spowoduje wygenerowanie następującego błędu kompilacji:
ZooAllInOneFile.java:11: error: class Snake is public, should be declared in a file named Snake.java
public class Snake {
^
1 error
To oznacza, że tylko klasa ZooAllInOneFile będzie dostępna publicznie dla dowolnej innej klasy Javy. Klasy Snake oraz Bird będą dostępne wyłącznie dla klas zdefiniowanych w tym samym folderze (w tym samym pakiecie) - będzie dla nich użyty domyślny modyfikator dostępu package-private. Więcej na ten temat dowiesz się w sekcji Modyfikatory dostępu - Access Modifiers.