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.