class Glyph {
void draw() {
print("Glyph.draw()");
}
Glyph() {
print("Glyph() before draw()");
draw();
print("Glyph() after draw()");
}
}
class RoundGlyph extends Glyph{
private int radius = 1;
RoundGlyph(int r){
radius = r;
print("RoundGLyph.draw(), radius = " + radius);
}
void draw(){
print("radius:" + radius);
}
public static void main(String[] args){
new RoundGlyph(5);
}
}
//Glyph() before draw()
radius:0
Glyph() after draw()
RoundGLyph.draw(), radius = 5
上面的代码。java-当我在构造函数中调用方法时会发生什么?
由于draw()不是静态的,所以必须给它一个隐式参数(this)。在这种情况下,在Glyph的构造函数中调用draw(),所以我想知道这个“隐式参数”是什么。 正如我所知道的,当我调用t.f()时,用t类型的T,编译器会将它变成T.f(t)。
结果表明,在我看来,它是一个作为此参数提供的RoundGlyph。但这怎么可能?显然,在调用draw()时不会创建RoundGlyph。
感谢您的回答。这是否意味着编译器将RoundGlyph作为第一个参数提供给draw()?正如我所知道的,当我调用t.f()时,用t类型的T,编译器会将它变成T.f(t)。 – Lucas
@Lucas,你的例子中的'draw'方法被称为'this',就像实例方法一样。由于它是从'RoundGlyph'构造函数调用的,'this'是指一个正在构建的'RoundGlyph'实例。正如我们所知,该对象是存在的,因为构造函数正在执行,如果该对象不存在,则无法执行该对象。 “在调用draw()时没有创建RoundGlyph”是错误的。实例在构造函数执行之前由'new'创建。 –