关于Java中的多态性super()的问题

由于重新调查了多态性,所以我会总结起来。
这次我想深入理解super()。

对象

    なんとなくでJavaを書いている人

super()是指父类的构造函数。

这是一个结论。

我想用具体的例子来试试看。

具體例子

public class Person {
    Person() {
        System.out.println("人間です。" + );
    }
}
public class Student extends Person {
    Student() {
        System.out.println("学生です。");
    }
}
public class Main {
    public static void main() {
        new Student();
    }
}
人間です。
学生です。

说明

没有输出”我是人”这样的语句,但是却会显示出来。
换句话说,继承了Person类的Student类的构造函数会被显示出来。

public class Student extends Person {
    Student() {
        super();
        System.out.println("学生です。");
    }
}

这就是现在的情况。

实际上并不是这样,但如果用明确的方式来写的话会是这种感觉。当生成继承类的实例时,父类的构造函数会自动调用。

这个super()就是父类的构造函数。

增加参数

在父类构造函数中添加参数。

public class Person {

    private String name;

    Person(String name) {
        this.name = name;
        System.out.println(name + "です。");
    }
}
public class Main {
    public static void main() {
        new Student();
    }
}

是的,这是一个编译错误。这是因为Person类的构造函数需要参数。在这种情况下,需要在Student类中使用super()并传入参数进行调用。

public class Student extends Person {
    Student(String name) {
        super(name);
        System.out.println("学生です。");
    }
}
public class Main {
    public static void main() {
        new Student("山田");
    }
}
山田です。
学生です。

由于Student继承了Person,所以也具有name字段。

public class Main {
    public static void main() {
        Student student = new Student("山田");
        System.out.println(student.name);
    }
}
山田です。
学生です。
山田
广告
将在 10 秒后关闭
bannerAds