当前位置: 技术问答>java相关
一个关于java构建器的初始化菜鸟问题,10分求解!!
来源: 互联网 发布时间:2015-02-28
本文导语: 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) { ...
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
问题: 1.为什么第一次的输出radius=0???
2.为什么先调用的衍生类RoundGlyph的构建器,然后才调用父类Glyph构建器里
的函数draw()???
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
问题: 1.为什么第一次的输出radius=0???
2.为什么先调用的衍生类RoundGlyph的构建器,然后才调用父类Glyph构建器里
的函数draw()???
|
执行顺序是这样的,
父类构造器,参数初始化,子类构造器,
由于父类构造器中的 draw() 被子类覆盖,所以打印出:
Glyph() before draw()
RoundGlyph.draw(),radius=0
Glyph() after draw()
然后参数初始化为5,再调用子类构造器:
RoundGlyph.RoundGlyph(),radius=5
评论人:
Microsoft OLE DB Provider for SQL Server 错误 '80004005'
Timeout expired
/news/newspl.asp,行48
csdn简直是asp的最佳反面宣传站点。
父类构造器,参数初始化,子类构造器,
由于父类构造器中的 draw() 被子类覆盖,所以打印出:
Glyph() before draw()
RoundGlyph.draw(),radius=0
Glyph() after draw()
然后参数初始化为5,再调用子类构造器:
RoundGlyph.RoundGlyph(),radius=5
评论人:
Microsoft OLE DB Provider for SQL Server 错误 '80004005'
Timeout expired
/news/newspl.asp,行48
csdn简直是asp的最佳反面宣传站点。