java自定义类引用错误

来源:百度知道 编辑:UC知道 时间:2024/07/04 11:38:00
问题:
public class A{
public A(){
}
}
public class B{
public B(){
A a=new A();
}
}
两个类都在C文件夹下,编译正常。
改成:
package C;
public class A{
public A(){
}
}

import C.A;
public class B{
public B(){
A a=new A();
}
}
A类在C文件夹下,B类在C文件夹外也正常编译。
但是改成:
package C;
public class A{
public A(){
}
}

package C;
import C.A; //
public class B{
public B(){
A a=new A();
}
}
两个类都放在C文件夹下,就编译错误,说找不到符号A。
我把import C.A去掉也错误。为什么啊?仔细看一下这三种情况区别,
为什么前两种情况可以,第三种不行,这是java的一种机制吗,还是
有别的错误?请大侠帮忙,解决加分!!!
我两个类是一块编译的,就是不行。
happyzhaow:B类放C文件夹外是可以,但是我把
C文件夹和B类(此时A类在C文件夹内)再放到D文件夹
下,并且A类改为package D.C.A;
B类改为package D.B;
import C.A;
之后就不行了。
但是好像只要我把B类放到包X里
然后以package X开头,在import A类就不行了。
越来越绕了,不知道理解否?

第三种情况,应该在C文件夹的上一层目录下编译,像这样:
javac C\B.java
或者直接
javac C\*.java

编译的时候把这两个类一起编译 javac A.java B.java

第三种情况下要么就一起编译,要么B类也要放在C文件夹外,才能编译成功。
编译的时候是从文件所在目录查找A类的class文件的。