构造器内部的多态方法的行为

<span style="background-color: rgb(255, 255, 255);">下面的程序展示了:在一个构造器内部,同时调用正在构造的那个对象的某个动态绑定方法</span>
package test;

public class PloyConstructors {
	
	public static void main(String[] args) {
		new RoundGlyph(5);

	}

}
abstract class Glyph{
	abstract void draw();
	Glyph(){
		System.out.println("Glyhp() before draw()");
		draw();
		System.out.println("Glphy() after draw()");
	}
}

class RoundGlyph extends Glyph{
	private int radius = 1;
	RoundGlyph(int r){
		radius = r;
		System.out.println("RoundGlyph.RoundGlyph(),radius = "+radius);
		
	}
	void draw(){
		System.out.println("RoundGlyph.draw(),radius = " + radius);
	}
}
运行结果:<span style="font-family:Arial;">Glyhp() before draw()</span><pre name="code" class="java"><span style="font-family:Arial;">RoundGlyph.draw(),radius = 0
Glphy() after draw()
RoundGlyph.RoundGlyph(),radius = 5</span>

如果要调用构造器内部的一个绑定方法,就要用到那个方法的被重载的定义。在上面的程序中,在调用导出类之前,radius初始化为值0而不是给定的初值1

上述程序的初始化过程为:

1.在其他任何事物发生前,将分配给对象的存储空间初始化成二进制的零;

2.调用基类构造器,此时,调用被重载的draw方法(是在调用导出类RoundGlyph的构造器之前调用)

3.按照声明顺序调用成员的初始化代码

4.调用导出类的构造器主体。

在编写基类构造器时,调用重载方法是不安全的,因此,因避免调用其它方法。在构造器内唯一能够安全调用的方法是基类中的final(private)方法。
















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值