构造方法链(constructor chaining)

出自:《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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值