Java 隐式超级构造函数Seat()未定义。必须显式调用另一个构造函数
我已经阅读了与这个主题相关的其他一些问题,并且诚实地说,我对所提供的答案感到非常困惑,而我所理解的答案似乎不起作用 我正在参加ap comp sci课程的介绍,希望能有更简单的答案。我的飞机建造师出了一个错误,这个错误就是上面的错误,我不知道如何解决它。我尝试使用超级方法,但可能是我做错了,因为错误仍然存在 飞机等级:Java 隐式超级构造函数Seat()未定义。必须显式调用另一个构造函数,java,eclipse,Java,Eclipse,我已经阅读了与这个主题相关的其他一些问题,并且诚实地说,我对所提供的答案感到非常困惑,而我所理解的答案似乎不起作用 我正在参加ap comp sci课程的介绍,希望能有更简单的答案。我的飞机建造师出了一个错误,这个错误就是上面的错误,我不知道如何解决它。我尝试使用超级方法,但可能是我做错了,因为错误仍然存在 飞机等级: public class Airplane { private Seat[][] seats; public static final int FIRST_CL
public class Airplane {
private Seat[][] seats;
public static final int FIRST_CLASS = 1;
public static final int ECONOMY = 2;
private static final int FC_ROWS = 5;
private static final int FC_COLS = 4;
private static final int ECONOMY_ROWS = 5;
private static final int ECONOMY_COLS = 6;
public Airplane() {
seats = new Seat[FC_ROWS][ECONOMY_COLS];
}
public String toString() {
String str = "";
for (int i = 0; i < FC_ROWS; i++) {
for (int j = 0; j < ECONOMY_COLS; j++) {
str = str + seats[i][j].toString();
}
str += "\n";
}
return str;
}
public class Seat {
private int seatType;
private boolean isReserved;
public static final int WINDOW = 1;
public static final int AISLE = 2;
public static final int CENTER = 3;
public Seat(int inSeatType) {
seatType = inSeatType;
isReserved = false;
}
public int getSeatType() {
return seatType;
}
public void reserveSeat() {
isReserved = true;
}
public boolean isAvailable() {
if (isReserved = false) {
return true;
} else {
return false;
}
}
public String toString() {
if (isReserved == false) {
return "*";
} else {
return "";
}
}
}
}
公共级飞机{
私人座位[][]个座位;
公共静态最终int第一类=1;
公共静态最终综合经济=2;
私有静态最终整数FC_行=5;
专用静态最终整数FC_COLS=4;
私人静态最终经济总量=5;
私人静态最终综合经济指数=6;
公共飞机(){
座位=新座位[前排][经济舱];
}
公共字符串toString(){
字符串str=“”;
对于(int i=0;i
您已经定义了一个构造函数Seat(int)
。默认情况下,如果没有定义构造函数,Java将有一个无参数构造函数Seat()
。既然已经定义了一个,那么在从代码的任何部分调用Seat()时,还必须定义一个无参数构造函数Seat()
另外if(isReserved=false)
将false
分配给isReserved
。始终使用==(或根据情况使用equals()进行比较)。在这里,因为它是布尔值,所以如果(!isReserved)
编辑:根据注释,删除了提到在数组定义上创建obj的部分您已经定义了一个构造函数
Seat(int)
。默认情况下,如果没有定义构造函数,Java将有一个无参数构造函数Seat()
。既然已经定义了一个,那么在从代码的任何部分调用Seat()时,还必须定义一个无参数构造函数Seat()
另外if(isReserved=false)
将false
分配给isReserved
。始终使用==(或根据情况使用equals()进行比较)。在这里,因为它是布尔值,所以如果(!isReserved)
编辑:根据注释,删除了提到在数组定义上创建obj的部分,尽管您的代码不会有这样的编译错误。我将澄清问题标题的答案: 只要存在继承,并且创建了子类的对象,子类的构造函数就会调用层次结构中所有超类的构造函数。(直到对象)默认情况下,它调用无参数构造函数。(提醒一下,如果您没有定义任何构造函数,jvm将生成一个no arg,但是如果您已经定义,jvm将不提供任何构造函数,您必须提供它。) 如果您在超类中提供了除无参数构造函数以外的任何其他构造函数,则期望无参数构造函数的子类将无法找到它,因为您既没有定义也没有jvm将提供其他构造函数存在的bcz 为了避免这种情况,您有两种选择,要么在超类中使用无参数构造函数,要么使用
super
从子类构造函数调用任何现有的超构造函数
subClass(){
super(<params>)
}
子类(){
超级()
}
尽管您的代码不会有这样的编译错误。我将澄清问题标题的答案:
只要存在继承,并且创建了子类的对象,子类的构造函数就会调用层次结构中所有超类的构造函数。(直到对象)默认情况下,它调用无参数构造函数。(提醒一下,如果您没有定义任何构造函数,jvm将生成一个no arg,但是如果您已经定义,jvm将不提供任何构造函数,您必须提供它。)
如果您在超类中提供了除无参数构造函数以外的任何其他构造函数,则期望无参数构造函数的子类将无法找到它,因为您既没有定义也没有jvm将提供其他构造函数存在的bcz
为了避免这种情况,您有两种选择,要么在超类中使用无参数构造函数,要么使用super
从子类构造函数调用任何现有的超构造函数
subClass(){
super(<params>)
}
子类(){
超级()
}
虽然您在问题中没有提供任何此类信息,但我还是会试试看
我猜您有一个子类Seat
,您没有向我们展示它。由于Seat
没有默认构造函数(没有参数的构造函数),因此在子类的构造函数中,需要显式调用super
调用正确的Seat
构造函数。例如,这将不起作用:
public class MySeat extends Seat {
// just an example constructor. Could be a constructor with any arguments
public MySeat() {
// Will not work, since the constructor Seat() does not exist, and Java tries to invoke this constructor if no super call is given.
}
}
相反,你需要这样做
public class MySeat extends Seat {
// Just an example constructor. Your constructor can take any arguments, but you need to invoke the correct super constructor
public MySeat(int seatType) {
super(seatType);
}
}
虽然你没有在你的问题中提供任何这样的信息,但我还是会冒险的 我猜你有一辆潜艇