【发布时间】:2015-11-30 04:15:17
【问题描述】:
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);
}
@Override
void draw() {
System.out.println("roundGlyph.draw:" + radius);
}
}
public class PolyConstructors {
public static void main(String[] args) {
new RoundGlyph(3);
}
}
输出是:
glyph() before draw
**roundGlyph.draw:0**
glyph() after draw
roundGlyph.RoundGlyph:3
我对第二个结果感到困惑,为什么父类构造函数中的代码draw(),实际上调用了子draw方法而不是父draw方法?
【问题讨论】:
-
继承是这样工作的
-
@MadProgrammer 除了它不是 C++ 中的继承方式。
-
@MichaelAnderson 好吧,当 OP 发布有关 C++ 的问题时,我一定会记住它;)
-
如果您创建
Glyph(new Glyph()) 的对象,那么它的Glyph.draw()方法将被调用。如果您创建RoundGlyph的对象,那么它的RoundGlyph.draw()方法将被调用。 -
所以每次我用
new RoundGlyph()初始化RoundGlyph对象时,它是否会初始化Glyph对象
标签: java methods constructor polymorphism