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

    xiaoxiao2025-03-19  15

    <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
    最新回复(0)