java中继承,子类是否继承父类的构造函数

下面来看例子:

public class TestExtends {
    public static void main(String[] args) {
        SonClass s = new SonClass(66);
    }
}

class FooClass{
    public FooClass() {
        System.out.println(100);
    }
    public FooClass(int count) {
        System.out.println(count);
    }
}

class SonClass extends FooClass{
    public SonClass() {
    }
    public SonClass(int c) {
        System.out.println(1234);
    }

}
登录后复制

运行结果:

接下来分析为什么会产生这样的结果:
程序在执行SonClass s = new SonClass(66);这行时,调用

public SonClass(int c) {
    System.out.println(1234);  //在执行这行时系统会优先调用父类的无参构造函数super();
}
登录后复制

因此子类在执行上面的构造方法时,等价于执行了下面的代码:

public SonClass(int c) {
    super(); // 必须在第一行调用,否则不能编译
    System.out.println(1234);  //在执行这行时系统会优先调用父类的无参构造函数super();
}
登录后复制

所以结果为:
100 1234

接下来介绍另外一种情况(显式调用),如果子类构造函数是这样写的:

public SonClass(int c) {
    super(2); // 必须写在第一行,否则不能编译,显式调用父类构造函数后,系统就不在默认调用无参构造函数了
    System.out.println(1234);
}
登录后复制

执行结构是:
2 1234

总结:

补充说明:

  1. 在java中,创建有参构造函数后,系统就不在有默认的无参构造函数

  2. 如果父类中没有任何构造函数,系统会默认有一个无参的构造函数

以上就是java的继承,子类是否继承父类的构造函数的详细内容,更多请关注Work网其它相关文章!

09-06 08:16