java - 隐式 super 构造函数 Seat() 未定义。必须显式调用另一个构造函数

标签 java eclipse

我已经阅读了与该主题相关的一些其他问题,老实说,我对所提供的答案感到非常困惑,而我确实理解的答案似乎不起作用。

我正在学习 ap comp sci 类(class)简介,因此更简单的答案将不胜感激。我的飞机构造函数出现错误,该错误就是上面的错误,并且不知道如何解决它,我尝试使用 super 方法,但也许我做错了,因为错误仍然存​​在。

飞机等级:

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 "";
            }
        }
    }
}

最佳答案

尽管你的代码不会有这样的编译错误。我将澄清问题标题的答案:

只要有继承,并且创建了子类的对象,子类的构造函数就会调用层次结构中所有父类(super class)的构造函数。(直到Object)默认情况下,它调用无参数构造函数。 (提醒一下,如果你没有定义任何构造函数,jvm会生成一个无参数,但如果你定义了,jvm不会提供任何构造函数,你必须提供它。)

如果您在父类(super class)中提供了除无参数构造函数之外的任何其他构造函数,则需要无参数构造函数的子类将无法找到它,因为您没有定义,jvm 也不会提供其他构造函数存在的 bcz。

为了避免这种情况,您有两种选择,要么在父类(super class)中使用无参数构造函数,要么使用 super 从子类构造函数调用 super 的任何现有构造函数。

subClass(){
super(<params>)
}

关于java - 隐式 super 构造函数 Seat() 未定义。必须显式调用另一个构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15803003/

相关文章:

java - 匿名类隐藏对局部变量的引用

java - Android-只需点击 AppIcon 即可打开抽屉导航

java - 什么 Maven Artifact 包含 javax.ws.rs.Path?

java - eclipse 从 tomcat webapp 导入项目

eclipse - 在 Eclipse : Could not find or load main class org. testng.remote.RemoteTestNG

Java "this"关键字对代码的影响

java - 如何将字节数组转换为 double 并返回?

windows - GWT 导致 Eclipse 无法在 Windows XP 上启动

python - Python 中奇怪的时间问题

java - 标记未知 s :property