首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

关于一个多态案例的懂得

2012-12-19 
关于一个多态案例的理解?package polymorphic class Glyph {void draw(){System.out.println(Glyph.draw

关于一个多态案例的理解

?

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 避免多态出现

?

?

热点排行