https://cloud.tencent.com/developer/article/1343672
每个类都有构造方法。
如果没有显式地为类定义构造方法,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关键字,系统会自动调用父类的无参构造器。