2016-11-15 92 views
0

我是Java的新手,所以如果代码看起来过于愚蠢,请耐心等待。 :-)从另一个类访问一个类,都在同一个包中

我想要实现的是简单的:定义两个类ClassAClassB,这是同一个包find_class的两个部分(这也是所在班是目录的名称

所以我的文件如下。

ClassA.java

package find_class; 

public class ClassA { 
    public void func() { 

    } 
} 

ClassB.java

package find_class; 

import find_class.ClassA; 

public class ClassB { 
    public static void main(String[] args) { 
     ClassA a = new ClassA(); 
    } 
} 

当我编译ClassB,我碰到的一些误区:

find_class$ javac ClassB.java 
ClassB.java:3: error: cannot find symbol 
import find_class.ClassA; 
       ^
    symbol: class ClassA 
    location: package find_class 
ClassB.java:7: error: cannot find symbol 
     ClassA a = new ClassA(); 
     ^
    symbol: class ClassA 
    location: class ClassB 
ClassB.java:7: error: cannot find symbol 
     ClassA a = new ClassA(); 
        ^
    symbol: class ClassA 
    location: class ClassB 
3 errors 

我没有使用任何IDE和目录结构如下:

find_class 
    - ClassA.java 
    - ClassB.java 

我究竟做错了什么?

+0

删除导入find_class.ClassA; – bane19

+0

你在使用IDE吗?一个好的IDE会向你指出这些问题并帮助你解决它们。 –

+0

只需验证项目构建路径中的包结构即可。您的类位于find_class目录中,但它将作为/ project/src在您的构建路径中 – Zia

回答

3

包名和类路径应该同步。换句话说,包名是类路径的延续。

例如,如果文件夹结构是X/Y/Z,类路径是X/Y,和包名是Z,那么你不应该导入YZ

应用相同的逻辑来你情况下,你的类路径已经设置为“find_class”。所以,你不需要导入语句。

+0

那么,默认情况下类路径被设置为当前目录?实际上,删除导入语句和包语句都可以工作。 – dotslash

+0

类路径是你可以显式设置的东西:https://docs.oracle.com/javase/tutorial/essential/environment/paths.html – attaboy182

0

你的类表示它在Package“find_class”中,该类知道其包中的所有其他类,因此不需要导入ClassA,因为它可以看到它。

删除线

import find_class.ClassA; 
+1

如何删除多余的导入修复他的问题?这个问题在别的地方。 – Tom

+0

@Tom正是我的观点!顺便说一句,删除'package'声明似乎可行,但看起来很奇怪。这是它应该如何? – dotslash

+0

@dotslash你为编译提供了一个类路径,对吧? – Tom

0

,如果你想使用其他类方法像你这样,你应该使用对象不需要导入其他class.For例子。

ClassA a = new ClassA(); 

通过ü不能导入类如果在同一个包的方式。

+2

*“顺便说一句,你不能导入类,如果有相同的包。”* *不能*是错的。不禁止这样做。 – Tom