Java构建子类对象时的顺序

先看一个这么的程序:

//------------------------------------------------------------------------//
//程序目的,创建一个父类与子类,分别创建构造方法
public abstract class usecase1 {
	abstract void testAbstract();
	usecase1(){//(1)首先执行父类构造方法
		System.out.println("before testAbstract()");
		testAbstract();//如果调用了抽象方法,调用子类覆盖的方法。这里调用Atest类的testAbstract()方法
		System.out.println("after testAbstarcat()");
	}
	public static void main(String args[]){
		new Atest();
	}
}
class Atest extends usecase1{//这里先把父类给继承了
	private int i=1;//(2)使成员变量进行初始化
	void testAbstract(){//这里说明一下就开始定义了
		System.out.println("1111111111testAbstract()"+i);//这里给覆盖了一下
	}
	public Atest(){//(3)调用子类构造方法
		System.out.println(i);
	}
}
//很容易的可以发现,当创建子类对象的时候
//①先调用了子类的构造函数
//②调用了父类的构造函数
//③执行了父类的构造函数
//④执行了子类的构造函数

该程序的运行结果如下:
在这里插入图片描述

你猜对运行结果没有?

这里主要涉及到了一个构建子类对象时顺序的问题
调用顺序如下:

//①先调用了子类的构造函数
//②调用了父类的构造函数
//③执行了父类的构造函数
//④执行了子类的构造函数

最开始创建了一个父类,后面创建了一个子类,当子类把父类继承的时候,里面的testAbstract()函数被覆盖了,所以后面按照他新定义的输出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值