这是我的第一个问题。我有两个类和一个接口。我无法编译以下代码。任何人都可以帮助我们解释为什么代码没有编译和运行。
public interface Animals {
public void run();
public void eat();
public void excreate();
public void mate();
}
public abstract class Mammals implements Animals {
public void run() {
System.out.println("Run with Four Legs");
}
public void eat() {
System.out.println("Eat Grass");
}
public void excreate() {
System.out.println("Excreate Excreata");
}
public void mate() {
System.out.println("Mammals Mate with a Mammal");
}
public abstract void giveBirth();
}
public class Horse extends Mammals {
public void mate() {
System.out.println("Horse Mates With A Mare");
}
public void giveBirth() {
System.out.println("Giving Birth To Foal");
}
public static void main(String[] args) {
Horse h1 = new Horse();
h1.eat();
h1.run();
h1.mate();
h1.giveBirth();
}
}
动物代码成功编译,而哺乳动物和马类没有编译。 错误附在下面的屏幕截图中 scrren1
答案 0 :(得分:2)
问题是您正在逐个编译文件,而javac在编译Animals
时找不到Mammals
。来自javac docs,
编译源文件时,编译器通常需要有关其定义未出现在命令行上给出的源文件中的类型的信息。
当编译器需要类型信息时,它会查找定义类型的源文件或类文件。编译器首先在引导程序和扩展类中搜索类文件,然后在用户类路径(默认情况下是当前目录)中搜索。通过设置CLASSPATH环境变量或使用-classpath命令行选项来定义用户类路径。 (有关详细信息,请参阅Setting the Class Path)。
如果设置-sourcepath选项,编译器将在指示的路径中搜索源文件;否则编译器会在用户类路径中搜索类文件和源文件。
正如您从屏幕截图中看到的那样,您正在编译的目录未被搜索源或类文件。 javac
实际上并未意识到Animals
是什么。
您可以将源路径/类路径设置为包含源文件夹,也可以直接编译多个源文件as the javac docs show:
编译多个源文件
此示例编译包问候语中的所有源文件。
C:\>dir /B greetings C:\>dir greetings /B Aloha.java GutenTag.java Hello.java Hi.java C:\>javac greetings\*.java C:\>dir greetings /B Aloha.class Aloha.java GutenTag.class GutenTag.java Hello.class Hello.java Hi.class Hi.java