您的位置:首页 > 编程语言 > Java开发

Java 显示调用和隐式调用

2015-07-26 16:55 495 查看
举个例子:

package com.test6;

//显示调用和隐式调用原则

//定义一个生物类

class Creature{

{

System.out.println(“Creature的非静态初始化块”);

}

//两个构造器

public Creature(){

/// 6

System.out.println(“Creature无参数的构造器”);

}

public Creature(String name){

//使用this调用另一个重载的、无参数的构造器 5

this();

System.out.println(“Creature带有name参数的构造器,name参数:”+name);

}

}

class Animal extends Creature{

{

System.out.println(“Animal的非静态初始化块”);

}
public Animal(String name){
//                         4
super(name);
System.out.println("Animal带一个参数的构造器,name参数:"+name);
}
public Animal(String name , int age){
//使用this调用另一个重载的构造器   3
this(name);
System.out.println("Animal带两个参数的构造器,age"+age);
}


}

class Wolf extends Animal{

{
System.out.println("Wolf的非静态初始化块");
}
public Wolf(){
//显示调用父类带两个参数的构造器     2
super("灰太狼",3);
System.out.println("Wolf无参数的构造器");
}
public Wolf(double weight){
//使用this 调用另一个重载的构造器     1
this();
System.out.println("Wolf的带weight参数的构造器,weight参数:"+weight);
}


}

public class InitTest {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
new Wolf(5.6);

}


}

运行结果:

Creature的非静态初始化块

Creature无参数的构造器

Creature带有name参数的构造器,name参数:灰太狼

Animal的非静态初始化块

Animal带一个参数的构造器,name参数:灰太狼

Animal带两个参数的构造器,age3

Wolf的非静态初始化块

Wolf无参数的构造器

Wolf的带weight参数的构造器,weight参数:5.6

程序初始化步骤:执行非静态初始化块(如果有的话)->隐式或显示调用类的一个或多个构造器执行初始化。

只要在程序中创建Java对象,系统总是先调用最顶层父类的初始化操作,包括初始化块和构造器。然后依次向下调用父类初始化操作,最后执行本类的初始化操作。至于调用父类的哪个构造器来执行初始化,分为三种情况:

a、子类构造器执行体的第一行使用super显示调用父类构造器,根据传入的参数来确定调用父类的哪个构造器;

b、子类构造器执行庭的第一行使用this显示调用本类中的重载构造器,根据传入的参数确定本类的另一个构造器;

c、都没有,系统将会在执行子类构造器之前,隐式调用父类无参数的构造器;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: