抽象类的有参与无参构造函数的研究

即使我们声明一个没有构造函数的抽象类,编译器还会为我们生成一个默认的保护级别的构造函数。子类实例化时(不管是否为带参构造)只会调用所有父类的无参构造函数,而带参构造必须通过显式去调用.调用顺序是先调用抽象类的无参构造函数,如果子类实例化时是使用带餐的构造函数,则再接着调用抽象类的带参构造函数,最后调用子类本身的构造函数。

abstract class Person {   //定义一个抽象类,必须被继承

    public  Person(){
        System.out.println("调用的是父类的无参构造函数");
    }
  public   Person(int i) {
      System.out.println("调用的是父类的有参构造函数");
    }
}

 class Student extends Person {
    //    想调用父类抽象类的有参构造函数必须先显式声明,然后通过super函数调用
    Student(int i) {
        super(i);
        //必须显示的调用父类构造方法,super代表父类对象
        System.out.println("子类的有参构造函数\n");
    }

    //默认调用父类的无参构造函数,同样必须显式声明
    Student(){
        System.out.println("子类的无参构造函数");
    }
}
public  class Test {
    public static void main(String[] args) {
        int i=0;
        Student 有参 = new Student(i);
        Student 无参 = new Student();


    }
}

结果:

调用的是父类的有参构造函数
子类的有参构造函数

调用的是父类的无参构造函数
子类的无参构造函数

猜你喜欢

转载自blog.csdn.net/qq_34834846/article/details/81413626