我正准备接受采访,我遇到了以下问题:
您有两个班级,即Main.java
和Gearbox.java
。 Gear
是一个内部类,位于Gearbox
中,如代码所示。哪个选项会成功执行程序?选项在Main
类中给出。
只是为了快速记录:它是在纸上给出的,所以我无法在计算机上执行。我运行程序,发现第一个选项将成功运行,但我的问题是为什么其他选项会抛出错误?
Main.java
public class Main {
public static void main(String[] args) {
Gearbox mcLaren = new Gearbox(6);
//Option:1
Gearbox.Gear first = mcLaren.new Gear(1, 12);
System.out.println(first.driveSpeed(1000));
//Option: 2
Gearbox.Gear second = new Gearbox.Gear(2, 15);
System.out.println(second.driveSpeed(1000));
//Option: 3
Gearbox.Gear third = new mcLaren.Gear(3, 17);
System.out.println(third.driveSpeed(1000));
}
}
Gearbox.java
public class Gearbox {
private ArrayList<Gear> gears;
private int maxGears;
public Gearbox(int maxGears) {
this.maxGears = maxGears;
this.gears = new ArrayList<>();
}
public class Gear{
private int gearNumber;
private double ratio;
public Gear(int gearNumber, double ratio) {
this.gearNumber = gearNumber;
this.ratio = ratio;
}
public double driveSpeed(int revs){
return revs * (this.ratio);
}
}
}
答案 0 :(得分:0)
选项2:
发生错误是因为您尝试使用内部类Gear
。如果Gear
没有GearBox
的实例,则public class Gear
不能存在。如果您将public static class Gear
更改为Gear
,则此错误会消失。
编辑:有趣的是,当您将内部类static
更改为new
时,选项1现在会抛出错误,因为您尝试从静态类创建实例。
选项3
每次使用关键字new
时,Java都会创建一个新对象。您可以从类创建对象。所以mcLaren
后面应该跟一个类构造函数。在这种情况下,Java正在查找包{{1}}中的类构造函数,但当然它并不存在。