一个简单的例子看多态

abstract class Glyph {
abstract void 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);
}
}
这么一段简单的程序,你可知道最后的输出是什么吗?
什么?你认为很easy?那你来呀,看你是否能得出正确的答案和理出正确的头绪.
 
如果你觉得需要一些提示,那么下面的知识点会起到一定参考作用.
1:如果不在派生类的构造函数里明确调用父类的构造函数,那么编译器就会悄悄调用父类的默认构造函数.并且是最先调用.
2:如果你在构造函数里面调用了动态绑定的方法,那么它会使用那个覆写后的版本.
 
最后答案如下:
 
Glyph() before draw()
RoundGlyph.draw(), radius = 0
Glyph() after draw()
RoundGlyph.RoundGlyph(), radius = 5

你可能感兴趣的:(J2SE)