当创建一个子类对象时,该对象是如何构造的呢?
我们先做一个测试
public class TestPersonStudentDemo1 {
public static void main(String[] args) {
Student s = new Student();
}
}
class Person {
String name;
int age;
// 父类的构造方法
public Person() {
System.out.println("1.public Person(){}");
}
}
class Student extends Person {
String school;
// 子类的构造方法
public Student() {
System.out.println("2.public Student(){}");
}
}
运行结果为:
1. public Person(){}
2. public Student(){}
从程序输出结果中可以发现,虽然程序第3行实例化的是子类的对象,但是程序却先去调用父类中的无参构造方法,之后再调用了子类本身的构造方法。所以由此可以得出结论,子类对象在实例化时会默认先去调用父类中的无参构造方法,之后再调用本类中的相应构造方法。
实际上在本范例中,在子类构造方法的第一行默认隐含了一个super()语句,上面的程序如果改写成下面的形式,也是可以的:
class Student extends Person{
String school ;
// 子类的构造方法
public Student(){
super(