java 急!谢谢。帮助!

来源:百度知道 编辑:UC知道 时间:2024/05/16 17:25:42
我想请教大家一个java的问题。子类在调用父类的构造方法时,自动塑型吗?
题目如下:
-----

abstract class Glyph {
abstract void draw();
Glyph() {
System.out.println("Glyph() before draw()");
draw();
System.out.println("Glyph() after draw()");
}
}
class RoundGlyph extends Glyph {
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);
}
}
-----------
运行结果:
Glyph() before draw()
RoundGlyph.draw().radius=0
Glyph() after draw()
RoundGlyph.RoundGlyph().radius=5
-----------------
疑问:
结果不明白,请大家帮帮忙。
谢谢您ysj52066,不过我还是不太明白
调用父类的构造方法,第二句dr

new RoundGlyph(5); 首先调用父类的构造方法
Glyph() {
System.out.println("Glyph() before draw()");
draw();
System.out.println("Glyph() after draw()");
}
执行
System.out.println("Glyph() before draw()");
时候输出:Glyph() before draw()
执行
draw();
时候由于子类对父类的方法进行了重写同时radius为int类型初始值默认为0所以输出
RoundGlyph.draw().radius=0
执行
System.out.println("Glyph() after draw()");
时候输出:Glyph() after draw()

然后开始执行子类的构造方法:
RoundGlyph(int r) {
radius = r;
System.out.println("RoundGlyph.RoundGlyph(), radius = " + radius);
}
然后输出:
RoundGlyph.RoundGlyph().radius=5

先调用父类只是针对构造方法 其他方法只有有重写就执行子类的重写方法 而不执行父类的方法

哦!我明白你的意思了,你的意思是说在父类调用就一定是调用父类的方法,但是父类是已经被子类实例化了,所以他只会去调用子类的方法