https://cloud.tencent.com/developer/article/1343672

1、仅构造方法

每个类都有构造方法。

如果没有显式地为类定义构造方法,Java编译器将会为该类提供一个默认构造方法。

若定义了有参构造方法,编译器将不会提供默认的无参构造,如需要,需要自己构造。

Java继承中对构造函数是不继承的,只是显式或者隐式调用。

实例

父类A

public class A {

    public A(){
        System.out.println("A constructor");
    }

    public A(int a){
        System.out.println("A constructor ,num:"+a);
    }
}

子类B

public class B extends A {

    public B (){
        System.out.println("B constructor");
    }

    public B(int b){
        System.out.println("B constructor ,num:"+b);
    }
}

测试类E

public class E {
    public static void main(String[] args) {
        System.out.println("E main");
        A a = new B();
        System.out.println("-------------AB可爱分割线-------------");
        B b = new B();

        System.out.println("\\\\n---------小可爱分割线-----------\\\\n");

        A a1 = new B(1);
        System.out.println("-------------AB可爱分割线-------------");
        B b1 = new B(2);
    }
}

测试结果

E main
A constructor
B constructor
-------------AB可爱分割线-------------
A constructor
B constructor

---------小可爱分割线-----------

A constructor
B constructor ,num:1
-------------AB可爱分割线-------------
A constructor
B constructor ,num:2

解析

Java继承中对构造函数是不继承的,只是显式或者隐式调用,并且必须是在构造函数第一行。这里是隐式调用了super()。

子类不能继承父类的构造器(构造方法或者构造函数),但是父类的构造器带有参数的,则必须在子类的构造器中显式地通过super关键字调用父类的构造器并配以适当的参数列表。

如果父类有无参构造器,则在子类的构造器中用super调用父类构造器不是必须的,如果没有使用super关键字,系统会自动调用父类的无参构造器。