父类引用指向子类对象,当调用父类的方法时,如果子类中有覆写,则调用子类的方法;没有则调用父类中的方法
另外子类中新增的方法此时不可见(如你在C类中增加一个方法F(),则r=c后,r.F()将出错)
A r;
B b = new B();
r = b;
此时r为A类型的引用,但它指向的对象是B类的对象,也就是子类对象
至于好处,你可以看看书,多态的用处
举个经典的例子吧:
Class Shape{
public void draw()
{
}
}
Class A1 extends Shape
{
public void draw()
{
}
}
Class A2 extends Shape
{
public void draw()
{
}
}
每种形状都可以画,如三角形,正方形等等,但每种形状的画法又不一样
有如下方法
public void drawShape(Shape shape)
{
shape.draw();
}
则该方法可以根据你实际传进来的对象调用相应的方法
比如:drawShape(new A1()),此时shape指向A1对象,则shape.draw()调用A1中的draw()
drawShape(new A2()),此时shape指向A2对象, 则shape.draw()调用A2中的draw()
如果A1 A2中没有重写draw(),都将调用Shape中的 draw()
第一次回答这么长,好象有点乱,不知道你能看懂不 |