super的使用

当父类和子类中存在同名的成员变量时,可以通过super关键字在子类中引用父类的成员,以区分父子类中同名的变量。

class Father {
    public int number = 10;
}

class Son extends Father {
    public int number = 20;

    void show() {
        System.out.println(number);       // 子类自己的number,输出20
        System.out.println(super.number); // 父类的number,输出10
    }
}Code language: JavaScript (javascript)

子类的构造函数中,需要调用父类的构造函数来完成父类部分的初始化。

可以使用super(参数)来显式调用父类的构造函数,也可以使用this(参数)来调用子类自身的其他构造函数。

注意:super()调用父类构造函数时,必须放在子类构造函数体的第一行。

另外,如果子类的构造函数中没有显式调用父类的构造函数,则系统会默认调用基类的无参构造函数。

如果子类的构造函数没有显式调用父类的构造函数,而基类中又没有定义无参构造函数(比如基类只定义了带参构造函数),则编译会出错。

class Father {
    public int number;

    Father(int n) {
        number = n;
    }
}

class Son extends Father {
    Son() {
        // 编译出错:没有显式调用父类构造函数,且父类没有无参构造函数
        // 必须显式调用 super(参数)
    }

    Son(int n) {
        super(n); // 正确:显式调用父类带参构造函数
    }
}Code language: JavaScript (javascript)
Previous:
Next:

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注