1)java类必须要有构造函数,在java中,private方法被自动认为是final方法,而且对子类是屏蔽的,也就是说子类对父类的继承,是不能重写private方法的,如果是同名,且参数类型和个数都相同时,不是重写,而是一个新的方法。
2)定义父类Glyph
父类中的draw()方法是可以重写的
package cn.javass.user;
public class Glyph {
void draw(){System.out.println("Glyph.draw()");};
Glyph() {
System.out.println("Glyph() before draw()");
draw();
System.out.println("Glyph() after draw()");
}
}
3)定义子类RoundGlyph
package cn.javass.user;
public class RoundGlyph extends Glyph{
private int radius=1;
RoundGlyph(int r) {
// TODO Auto-generated constructor stub
radius=r;
System.out.println("RoundGlyph.RoundGlyph(),radius="+radius);
}
void draw(){
System.out.println("RoundGlyph.draw(),radius="+radius);
}
public static void main(String[] args) {
new RoundGlyph(5);
}
}
4)运行结果如下
Glyph() before draw()
RoundGlyph.draw(),radius=0
Glyph() after draw()
RoundGlyph.RoundGlyph(),radius=5
5)子类重写了父类的draw()方法,在父类的构造函数中,有一个多态的方法draw(),在调用draw()时,子类还没初始化,所以radius为0。