我理解在Java中,超类的引用变量可以引用其子类的对象的概念。但我真的不明白为什么它在以下或任何其他情况下很重要:
class Figure {
double dim1 , dim2;
Figure(double a, double b){
dim1 = a;
dim2 = b;
}
double area(){
System.out.println("Area undefined");
return 0;
}
}
class Rectangle extends Figure{
Rectangle(int a, int b){
super(a,b);
}
double area(){
System.out.println("Area of rectangle:");
return dim1*dim2;
}
}
class Triangle extends Figure{
Triangle(int a, int b){
super(a,b);
}
double area(){
System.out.println("Area of triangle:");
return dim1*dim2/2;
}
}
class CalArea{
public static void main(String args[]){
Figure fig = new Figure(10,10);
Rectangle rect = new Rectangle(20,10);
Triangle tri = new Triangle(10,15);
Figure figref; //Figure class reference
figref = fig;
System.out.println(figref.area());
figref = rect;
System.out.println(figref.area());
figref = tri;
System.out.println(figref.area());
}
}
此处不是将超类图的变量 figref 引用到其子类矩形和三角形的每个对象,我可以用它们各自的对象调用每个类的 area()方法。 重要的是我们可以实施动态方法调度 ??
请提供一个更真实的例子,以便了解它的重要性以及应该应用的地方。