Java では、ファイルごとに複数のトップレベル クラスを宣言できますが、それらのクラスの最大 1 つが public であるという条件が適用されます。
ただし、Oracle Java コンパイラは、この種の依存関係を解決するのに問題があるようです。検討:
// One.java
package jtest;
import jtest.Three;
public class One {}
// Two.java
package jtest;
public class Two {}
class Three {}
この最初のコンパイルの試みはエラーで終了します。
javac -cp . jtest\One.java
jtest\One.java:3: error: cannot find symbol
import jtest.Three;
^
symbol: class Three
location: package jtest
1 error
ただし、これは期待どおりに機能します
javac -cp . jtest\Two.java
javac -cp . jtest\One.java
現在、これは「既知の」動作です(たとえば、この回答で報告されています)。ただし、ほとんどのビルド システムでは、このシナリオに問題はないようです (Eclipse と Apache Builder を試しました)。彼らはどのように問題を解決しますか?
また、Eclipse と Apache Builder の両方がまつげを打たずにこれをコンパイルできることも考慮してください。
// One.java
package main;
import main.Four;
public class One {}
class Three {}
// Two.java
package main;
import main.Three;
public class Two {}
class Four {}