/**
* java 显示调用和隐式调用
* @author raytseng
*
*/
class grandfather {
public grandfather() {
System.out.println("调用grandfather的无参构造函数");
}
public grandfather(String name) {
this();//调用无参构造函数
System.out.println("调用grandfather的带一个参数的构造函数 name:"+name);
}
{
//非静态初始化块
System.out.println("调用grandfather的非静态初始化块");
}
}
class father extends grandfather{
public father() {
System.out.println("调用father的无参构造函数");
}
public father(String name) {
super(name); //显示调用父类构造函数
System.out.println("调用father的带一个参数的构造函数 name:"+name);
}
public father(String name,int age) {
this(name); //显示调用当前类的其他构造函数
System.out.println("调用father的带两个参数的构造函数 name:"+name+" age:"+age);
}
{
//非静态初始化块
System.out.println("调用father的非静态初始化块");
}
}
class son extends father{
public son() {
super("tseng", 28);//显示调用父类构造函数
System.out.println("调用son的无参构造函数");
}
public son(int height) {
this(); //显示调用当前类的其他构造函数
System.out.println("调用son的带新的参数构造函数: "+height);
}
{
//非静态初始化块
System.out.println("调用son的非静态初始化块");
}
}
//测试类
public class initTest {
public static void main(String[] args) {
new son(126);
}
}
从上到下依次调用为下面所示:
调用grandfather的非静态初始化块
调用grandfather的无参构造函数
调用grandfather的带一个参数的构造函数 name:tseng
调用father的非静态初始化块
调用father的带一个参数的构造函数 name:tseng
调用father的带两个参数的构造函数 name:tseng age:28
调用son的非静态初始化块
调用son的无参构造函数
调用son的带新的参数构造函数: 126