I’m not sure how to import a file from a directory above. That is, I have a setup like so
directory: MyProject
Main.java
directory: Other
Other.java
Basically, Main.java is in “MyProject” and Other.java is in a folder inside the project’s root folder. I can easily do
import Other.*;
to get those files available in Main, but how do I get Main.java to be visible to Other.java?
import ../Main.java
Obviously this doesn’t work, but that’s the general functionality I’m looking for. Any suggestions? I would prefer not having to use absolute paths. Thanks!
Edit: I meant import not include. Sorry. Been using C++ too much.
Java does not include files. You can however directly use classes using the simple name by using
importstatements.Basically you need a file per (top level) class you define. This allows IDE’s to rename compilation units, and do other refactorings. Besides that, it lets you easily add code at the right spot.
Java does use packages to create namespaces. Packages themselves are completely separate namespaces. Although the namespace seems to be a tree structure, in Java each package is actually not related to any other package. Hence you cannot use it as a folder structure, using
..is not allowed. This may change once “super packages” are introduced.The Java
importstatement looks a lot like#include, but the name change is deliberate: instead of grabbing the file to make the definitions in that file known, it is simply a statement to make it easier to refer to classes and interfaces. It has no other effect than having a shorter name to a class (or, forimport static, constants and otherstaticmembers).Most of the time the top level classes are represented using a folder structure that reflects the package name. This makes it easy for IDE’s and developers to find the file representing the class. It also makes it easy to put in version control. It is however not part of the Java specification itself; the location of Java source and classes is not defined. Earlier IBM IDE’s actually stored Java source and classes in a database for instance; they did not use files at all. Newer IDE’s such as Eclipse may use different source folders, e.g. one for Unit test files and one for the library itself.
So finally, the only way to include packages is by specifying the full package name, then a dot and then the class to import, or the
*wildcard to import all classes of that package.Most IDE’s will create these import statements for you, possibly after you have chosen the right class to import (in case there are classes with the same name in different packages).
More information can be found in the Java Language Specification (Java 7 version).
In your case you have defined a
Mainclass in the root or default package which is strongly discouraged. You can directly refer toMainwithout anyimportstatement. TheOtherclass is in the identically namedOtherpackage (using uppercase in package names is strongly discouraged as well). You can refer to it by usingimport Other.Other.