考题:对象实例化过程

package test;
/**
 * 对象实例化过程:
 * 1,首先加载类,如果发现有父类,先加载父类再加载子类。
 * 2,依次为类的属性分配空间并执行默认初始化.如int默认初始化为0,boolean变量为false。
 * 3,然后调用Child()构造器。由于Child()的构造器里没有显式使用super()来调用父类构造器,因此
 * 系统将自动调用Base()类中无参构造器来执行初始化。
 * 4,执行Base()构造器时,先将Base类里的属性i赋值为2,然后执行构造器里的this.display()方法。
 * 注意:此时,这里的this指的是创建的Child()对象。所以会调用子类的display()方法。而此时子类的属性i还是默认初始值,所以打印出0。
 * 5,Base()执行完之后,开始执行子类的构造器。在执行Child()时,会依次执行i=22,i=600,然后执行构造器里的i=222。至此,对象实例化过程完毕。
 * 
 * 考核要点:
 * 1,必须说到类加载顺序。先加载父类,再加载子类的。
 * 2,如何证明Base()里的this是创建的子类对象,通过this.getClass()可以查看。
 * 3,如果子类没有重写display()方法,则会调用父类的display()方法。
 * 4,每一步的图必须画清晰。
 * 5,有同学会问,只能打印出子类的属性i,那么如何打印出父类的属性i呢?可以在display()方法里使用
 * super.display()方法。
 * 6,必须说到代码块与初始化语句的执行顺序。
 *
 */
public class Test {
	public static void main(String[] args) {
		Base child=new Child();
	}
}
class Base{
	public int i=2;
	public Base(){
		this.display();//构造器里面的this指的是要创建的对象。
		System.out.println(this.getClass());
        //this.dis(); //编译不通过,this是指的父类(Base)要创建的对象
	}
	public void display(){
		System.out.println("i"+i);
	}
}
class Child extends Base{
	public int i=22;
	{
		 i=600;
	}
	public Child(){
		i=222;
	}
	public void display(){
		super.display();//调用父类的方法super
		System.out.println("i="+i);
	}
	public void dis(){
		super.display();
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值