三个类的继承关系如下:
Person
|
Student
|
GoodStudent
其中,Person是父类,Student是子类,GoodStudent是Student的子类。即Student继承了Person类,GoodStudent继承了Student类。
在Java中,子类的构造函数中会默认调用父类的空参构造函数。若父类没有空参构造函数,则需要在子类的构造函数中手动调用父类的有参构造函数。还可以使用super关键字来调用父类的构造函数。
例如,Person类和Student类定义如下:
public class Person {
private String name;
public Person() {
System.out.println("Person的无参构造函数被调用了");
}
public Person(String name) {
System.out.println("Person的有参构造函数被调用了");
this.name = name;
}
}
public class Student extends Person {
private int grade;
public Student(int grade) {
System.out.println("Student的无参构造函数被调用了");
this.grade = grade;
}
public Student(String name, int grade) {
super(name); // 调用父类的有参构造函数
System.out.println("Student的有参构造函数被调用了");
this.grade = grade;
}
}
在这个例子中,Person有空参构造函数和有参构造函数,但是Student只有有参构造函数,没有空参构造函数。当创建Student对象时,由于Student没有定义空参构造函数,Java编译器会默认调用父类Person的空参构造函数。
接下来,我们可以用以下代码创建一个Student对象:
Student student1 = new Student(90);
执行以上代码后,输出结果为:
Person的无参构造函数被调用了
Student的无参构造函数被调用了
由此可见,当创建Student对象时,会先调用Person的无参构造函数,然后调用Student的无参构造函数。
接下来,我们再创建一个Student对象:
Student student2 = new Student("小红", 80);
执行以上代码后,输出结果为:
Person的有参构造函数被调用了
Student的有参构造函数被调用了
由此可见,当创建Student对象时,会先调用Person的有参构造函数,然后调用Student的有参构造函数。在Student的有参构造函数中,使用super关键字调用了父类Person的有参构造函数。
使用相同的方法,我们可以创建GoodStudent:
public class GoodStudent extends Student {
private String praise;
public GoodStudent(String praise) {
System.out.println("GoodStudent的无参构造函数被调用了");
this.praise = praise;
}
public GoodStudent(String name, int grade, String praise) {
super(name, grade); // 调用父类Student的有参构造函数
System.out.println("GoodStudent的有参构造函数被调用了");
this.praise = praise;
}
}
GoodStudent goodStudent = new GoodStudent("好样的");
执行以上代码后,输出结果为:
Person的无参构造函数被调用了
Student的无参构造函数被调用了
GoodStudent的无参构造函数被调用了
由此可见,创建GoodStudent对象时,会先调用Person的无参构造函数,然后调用Student的无参构造函数,最后调用GoodStudent的无参构造函数。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java Person,Student,GoodStudent 三个类的继承、构造函数的执行 - Python技术站