出自:《Java语言程序设计基础篇》第二篇 面向对象程序设计
构造方法可以调用覆盖的构造方法或父类的构造方法。如果它们都没显式地调用,编译器将把super()当作构造方法的第一条语句。
例如:
public A() {
}
//与以上构造方法等价
public A() {
super();
}
public A(double d) {
//Some statements
}
//等价于以上构造方法
public A(double d) {
super();
//some statements
}
在任何情况下,构造一个类的实例时,将会沿着继承链调用所有父类的构造方法,父类的构造方法在子类的构造方法之前调用,这叫做构造方法链(constructor chaining)。
例子:
/**
* @(#)ConstructorChainingTest.java
*
* ConstructorChainingTest application
*
* @author
* @version 1.00 2013/6/3
*/
public class ConstructorChainingTest extends Employee {
public static void main(String[] args) {
// TODO, add your application code
new ConstructorChainingTest();
}
public ConstructorChainingTest() {
System.out.println("(4)Faculty's no-arg constructor is invoked");
}
}
class Employee extends Person {
public Employee() {
this("(2)Invoke Employee's overloaded constructor");
System.out.println("(3)Employee's no-arg constructor is invoked");
}
public Employee(String s) {
System.out.println(s);
}
}
class Person {
public Person() {
System.out.println("(1)Person's no-arg constructor is invoked");
}
}
输出如下:
(1)Person's no-arg constructor is invoked
(2)Invoke Employee's overloaded constructor
(3)Employee's no-arg constructor is invoked
(4)Faculty's no-arg constructor is invoked