发生多态要有三个前提条件
- 继承
- 覆盖
- 声明的变量类型是父类类型,但实例则指向子类实例
举例:
public class Figure {
//绘制几何图形方法
public void onDraw() {
System.out.println("绘制Figure...");
}
}
//几何图形三角形
public class Triangle extends Figure { //这里体现了多态第一点:继承
// 绘制几何图形方法
@Override
public void onDraw() {//这里体现了多态第二点:重写
System.out.println("绘制三角形...");
}
}
//几何图形椭圆形
public class Ellipse extends Figure {
//绘制几何图形方法
@Override
public void onDraw() {
System.out.println("绘制椭圆形...");
}
}
调用代码:
public class HelloWorld {
public static void main(String[] args) {
// f1变量是父类类型,指向父类实例
Figure f1 = new Figure();
f1.onDraw();
// f2变量是父类类型,指向子类实例,发生多态
Figure f2 = new Triangle();
f2.onDraw();
// f3变量是父类类型,指向子类实例,发生多态
Figure f3 = new Ellipse();
f3.onDraw();
// f4变量是子类类型,指向子类实例
Triangle f4 = new Triangle();
f4.onDraw();
}
}
绘制Figure...
绘制三角形...
绘制椭圆形...
绘制三角形...