javac bunu aktif olarak yasaklamıyor, ancak içinde bulunduğu dosya ile aynı ada sahip olmadıkça başka bir dosyadan üst düzey bir sınıfa asla başvurmak istemeyeceğiniz anlamına gelen bir sınırlama var.
İki dosyanız olduğunu varsayalım: Foo.java ve Bar.java.
Foo.java şunları içerir:
Bar.java şunları içerir:
- kamu sınıfı Bar
- baz sınıfı
Diyelim ki tüm sınıflar aynı pakette (ve dosyalar aynı dizinde).
Foo.java, Bar'a değil Baz'a atıfta bulunur ve Foo.java'yı derlemeye çalışırsak ne olur? Derleme böyle bir hata ile başarısız olur:
Foo.java:2: cannot find symbol
symbol : class Baz
location: class Foo
private Baz baz;
^
1 error
Bunu düşünürseniz mantıklı geliyor. Foo.java Baz'a atıfta bulunuyorsa, ancak Baz.java (veya Baz.class) yoksa, javac hangi kaynak dosyaya bakılacağını nasıl bilebilir?
Bunun yerine javac'a Foo.java ve Bar.java'yı aynı anda derlemesini söylerseniz veya daha önce Bar.java'yı derlemiş olsanız bile (javac'ın bulabileceği Baz.class'ı bırakarak) bu hata ortadan kalkar. Ancak bu, yapım sürecinizi çok güvenilmez ve pul pul hissettirir.
Çünkü daha çok "gibi olan gerçek sınırlama, içinde bulunduğu dosyayla aynı ada sahip olmadıkça veya aynı dosyada adı verilen aynı sınıfa ait bir sınıfa başvurmuyorsanız, başka bir dosyadan üst düzey bir sınıfa başvurmayın dosya ile aynı şey "takip etmek biraz zor, insanlar genellikle her dosyaya sadece bir üst düzey sınıf koymak çok daha basit (daha katı) kural ile gidin. Bu, bir sınıfın herkese açık olup olmayacağı konusunda fikrinizi değiştirirseniz daha da iyidir.
Bazen herkesin bir şeyi belirli bir şekilde yapmasının gerçekten iyi bir nedeni vardır.