I've the following two source files
File World.java
package planets;
public class World {
    public static void main(String[] args) {
        Mars.land();
    }
}
File Moon.java
package planets;
public class Moon {
    public static void land() {
        System.out.println("Hello Moon");
    }
}
class Mars {
    public static void land() {
        System.out.println("Hello Mars");
    }
}
As we can see, the Moon.java contains two classes: the public Moon class and the nonpublic Mars class.
The files are located inside planets directory, below is showed the directory tree
+current-dir:
+----+planets:
      +----+World.java
      +----+Moon.java
Now, if I try to compile from Windows command prompt (I'm inside current-dir folder) typing
javac planets\World.java
I receive this error message:
planets\World.java:5: error: cannot find symbol
       Mars.land();
       ^
  symbol:   variable Mars
  location: class World
1 error
It's very strange, because I know that the compiler searches for nonpublic classes inside all the source files of the current package. Also Cay Horstmann's Core Java Vol 1, 10th ed. at pp. 192-193 says that:
[...]you can import nonpublic classes from the current package. These classes may be defined in source files with different names. If you import a class from the current package, the compiler searches all source files of the current package to see which one defines the class.
In addition I tried to write these files using Eclipse Oxygen and it compile without problems. But I know that Eclipse use a different compiler.
Why does javac compiler fail?
EDIT: I have not set CLASSPATH variable. So by default compiler looks inside current directory.
 
    