<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)方法。
转载请注明原文地址: https://ju.6miu.com/read-1297170.html