关于一个多态案例的理解
?
package polymorphic; class Glyph { void draw(){System.out.println("Glyph.draw()");}public Glyph() {System.out.println("Glyph() before draw()"); draw();System.out.println("Glyph() after draw()");} }class RoundGlyph extends Glyph {String ff="i lovw"; void draw(){System.out.println("RoundGlyph.draw()"+radius); System.out.println("ff"+ff); } private int radius=1;public RoundGlyph(int r) {radius=r;System.out.println("RoundGlyph.RoundGlyph,raius="+radius);}}public class PolyConstructor { public static void main(String[] args) {new RoundGlyph(5);}}/*output:Glyph() before draw()RoundGlyph.draw()0Glyph() after draw()RoundGlyph.RoundGlyph,raius=5*/?
//这个例子告诉我们初始化一个对象的步骤应该是这样的:
//1在调用父类构造器之前 对象的存储空间初始化为二进制的0
//2然后会调用基类的构造器,发现draw()方法被覆盖后,由于后期绑定的缘故,会调用子类对象本身draw()方法.
//此时方法中的radius变量还未进行初始化 所以显示为0
//3然后才会按照声明的顺序 初始化操作的成员
//4调用导出类的构造器主体
//所以我认为多态你需要注意的两个概念? 第一个就是 动态绑定
//就是运行时根据对象的类型进行动态绑定 这是动态绑定的定义
//第二个需要注意的地方 就是这个构造器中有多态对象存在的案例
//所有子类对象还未进行初始化 但是 虚拟机会将对象的所有东西至少初始化为0
//为了避免这种情况发生 你可有在基类使用final或者private 避免多态出现
?
?