java abstract构造函数调用

构造函数是对象的基本,没有构造函数就没有对象。
如果在父类中(这里就是你的抽象类)中显示的写了有参数的构造函数,在子类继承是就必须写一个构造函数来调用父类的构造函数

public abstract class Person {
    int a = 0;

  //如果不写Person(),java会默认加上一个不带参数的构造函数,即Person(){};
Person() { a
= 10;
     System.out.println("class is " + Person.class);
} Person(
int x) { a = x; } }

子类

public class Student extends Person {
    int b = 0;

Student() {
     //super();//可不写,默认调用Person(); b
= 100;
     System.out.println("class is " + Student.class); } Student(
int x) {
     //super(x);此处若不显示调用父类的带参构造函数,则默认调用 无参 构造函数Person();
b
= 200;
} }

测试类

public class abTest {
    
    public static void main(String[] args) {
         Student s = new Student();
        System.out.println(s.a);

        Student s1 = new Student(1000);
        System.out.println(s1.a);
    }
}

输出

class is class AbstractClz.Ab_1.Person
class is class AbstractClz.Ab_1.Student
10
class is class AbstractClz.Ab_1.Person
10

结论:

无参:调用子类的构造函数前,先执行父类的构造函数。

带参:带参构造函数需显示调用super(x),才能调用父类的Person(int x),否则调用默认Person();

原文地址:https://www.cnblogs.com/pu20065226/p/10065668.html