关于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);
}
}
山田です。
学生です。
山田