java多态

xiaoxiao2021-02-28  101

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

class Glyph{ void draw(){ System.out.println("Glyph.draw()"); } Glyph(){ System.out.println("Glyph() before draw()"); draw(); System.out.println("Glyph() 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); } } public class PolyConstructors { public static void main(String []args){ new RoundGlyph(5); } } /*输出: Glyph() before draw() RoundGlyph.draw(),radius=0 Glyph() after draw() RoundGlyph.RoundGlyph(),radius=5 */

上面代码可以看出,导出类重写了基类的draw()方法,所以new RoundGlyph时,Glyph()中的draw()调用的是RoundGlyph中重写的draw()方法,但是由于初始化顺序的原因,radius并没有赋值,所以radius的值为0。

初始化实际过程是: 1.在其他任何事物发生前,将分配给对象的存储空间初始化成二进制的零。 2.调用基类构造器。此时,调用被覆盖后的draw()方法(要在调用RoundGlyph构造器之前调用),由于步骤一的缘故,此时radius的值为零。 3.按照声明的顺序调用成员的初始化方法。 4.调用导出类的构造器主体。

转载请注明原文地址: https://www.6miu.com/read-68523.html

最新回复(0)