繁体   English   中英

Java编译器为什么不能从另一个文件中找到类?

[英]Why doesn't Java compiler find class from another file?

所以,Main.java呼吁从House.javaHouse.class的方法一类房子应该从呼吁任命类的方法扩展继承 ,它位于Succession.java。

但是由于某种原因,编译器找不到Appointment并假定它必须是缺少的变量,为什么? 如果我将约会类移到Main.java或给它自己的文件,编译器会找到它。

我之所以这样问,是因为我无法重新创建错误,

House.java:

public void succession(){
    if (this.kinsmen.size() > 0){
        Appointment.callHeir(this.head, Main.human.get(1));

Succession.java:

class Appointment extends Succession {
    public static boolean callHeir(Human appointer, Human appointed){

错误:

 error: cannot find symbol
            Appointment.callHeir(this.head, Main.human.get(1));
            ^
  symbol:   variable Appointment
  location: class House

编辑完整的代码最小化:

Main.java:

class Main {
    public static void main(String[] args) {
        House.succession();
    }
}

House.java:

public class House {
    public static void succession() {
        Appointment.callHeir();
    }
}

Succession.java:

class Succession{

}

class Appointment extends Succession {
    public static void callHeir(){
    }
}

我不确定,但这可能是原因:

编译Main.java时遇到House.succession()
它没有找到House.class所以它查找并编译了House.java

编译House.java时遇到Appointment.callHeir()
它找不到Appointment.class因此它查找不存在的Appointment.java

当我像这样更改House.java

public class House {
    public static void succession() {
        Succession dummy;
        Appointment.callHeir();
    }
}

一切正常。
这是因为它首先遇到了Succession dummy ,这使编译器查找了Succession.java 编译该文件后,我们将自动获得Appointment.class

正如其他人已经建议的那样,我强烈建议将Appointment类放在其自己的文件中。

将约会类的访问修饰符/说明符设置为public 因为任何类的默认访问修饰符/符是default其不列入允许访问从另一个类的类。

确保如果您需要从类外部访问该类,则该类的访问修饰符/说明符将是公共的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM