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的非静态初始化块”);
}
class Wolf extends Animal{
}
public class InitTest {
}
运行结果:
Creature的非静态初始化块
Creature无参数的构造器
Creature带有name参数的构造器,name参数:灰太狼
Animal的非静态初始化块
Animal带一个参数的构造器,name参数:灰太狼
Animal带两个参数的构造器,age3
Wolf的非静态初始化块
Wolf无参数的构造器
Wolf的带weight参数的构造器,weight参数:5.6
程序初始化步骤:执行非静态初始化块(如果有的话)->隐式或显示调用类的一个或多个构造器执行初始化。
只要在程序中创建Java对象,系统总是先调用最顶层父类的初始化操作,包括初始化块和构造器。然后依次向下调用父类初始化操作,最后执行本类的初始化操作。至于调用父类的哪个构造器来执行初始化,分为三种情况:
a、子类构造器执行体的第一行使用super显示调用父类构造器,根据传入的参数来确定调用父类的哪个构造器;
b、子类构造器执行庭的第一行使用this显示调用本类中的重载构造器,根据传入的参数确定本类的另一个构造器;
c、都没有,系统将会在执行子类构造器之前,隐式调用父类无参数的构造器;
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、都没有,系统将会在执行子类构造器之前,隐式调用父类无参数的构造器;
相关文章推荐
- mybatis的缓存机制(一级缓存二级缓存和刷新缓存)和mybatis整合ehcache
- Java中堆和栈的区别
- cmd运行Java的步骤以及出现找不到或无法加载主类的时的解决办法
- Spring与classpath*加载配置文件
- JAVA垃圾收集机制与内存分配
- Eclipse 常用快捷键
- java String的equals,intern方法(转载)
- eclipse中的输入提示怎么设置
- java.lang.IllegalArgumentException的解决
- java基础-反射之Class.forName
- java实现CSV 字段分割
- Java 理论与实践: 正确使用 Volatile 变量
- JAVA调用接口
- JAVA.AWT.CANVAS使用
- 解决问题:Ubuntu 14.04下Eclipse CDT菜单栏失效
- Java程序员从笨鸟到菜鸟之(七十四)细谈Spring(六)spring之AOP基本概念和配置详解
- 复杂计算器的实现,没有界面
- 类A是公共的,应在名为A.java的文件中声明错误
- 算法(第四版)学习笔记之java实现堆排序
- JAVA基础之理解JNI原理