在面向对象程序设计中多态是一个非常重要的特性,理解多态有利于进行面向对象的分析与设计。
发生多态要有三个前提条件:
- 继承。多态发生一定要子类和父类之间。
- 覆盖。子类覆盖了父类的方法。
- 声明的变量类型是父类类型,但实例则指向子类实例。
如图所示,父类Figure(几何图形)类有一个onDraw(绘图) 方法,Figure(几何图形)它有两个子类Ellipse(椭圆形)和Triangle(三角形),Ellipse和Triangle覆 盖onDraw方法。Ellipse和Triangle都有onDraw方法,但具体实现的方式不同。
示例代码:
public class Figure {
public void onDraw(){
System.out.println("绘制。。");
}
}
class Ellispe extends Figure{
@Override
public void onDraw() {
System.out.println("绘制椭圆");
}
}
class Triangle extends Figure{
@Override
public void onDraw() {
System.out.println("绘制长方形");
}
}
class Test{
public static void main(String[] args) {
// f1变量是父类型,指向父类型
Figure f1 = new Figure();
f1.onDraw();
// f1变量指向父类型,指向子类实例,发生多态
Figure f2 = new Ellispe();
f2.onDraw();
// f3变量指向父类型,指向子类实例,发生多态
Figure f3 = new Triangle();
f3.onDraw();
// f4指向子类型,指向子类实例
Triangle f4 = new Triangle();
f4.onDraw();
}
}
运行结果:
绘制。。
绘制椭圆
绘制长方形
绘制长方形
从运行结果可知,多态发生时,Java虚拟机运行时根据引用变量指向的实例调用它的方法,而不是根 据引用变量的类型调用。
在继承层次中,把子类对象赋给父类引用后注意事项:
- 父类中没有的方法不能调用
- 子类没有重写的方法,执行父类的方法行为
- 子类重写的方法,执行子类的方法行为
以上内容仅供参考学习,如有侵权请联系我删除!
如果这篇文章对您有帮助,左下角的大拇指就是对博主最大的鼓励。
您的鼓励就是博主最大的动力!