浅谈Java中的多态性

在面向对象程序设计中多态是一个非常重要的特性,理解多态有利于进行面向对象的分析与设计。
发生多态要有三个前提条件:

  • 继承。多态发生一定要子类和父类之间。
  • 覆盖。子类覆盖了父类的方法。
  • 声明的变量类型是父类类型,但实例则指向子类实例。

如图所示,父类Figure(几何图形)类有一个onDraw(绘图) 方法,Figure(几何图形)它有两个子类Ellipse(椭圆形)和Triangle(三角形),Ellipse和Triangle覆 盖onDraw方法。Ellipse和Triangle都有onDraw方法,但具体实现的方式不同。

浅谈Java中的多态性_第1张图片
示例代码:

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虚拟机运行时根据引用变量指向的实例调用它的方法,而不是根 据引用变量的类型调用。

在继承层次中,把子类对象赋给父类引用后注意事项:

  • 父类中没有的方法不能调用
  • 子类没有重写的方法,执行父类的方法行为
  • 子类重写的方法,执行子类的方法行为

以上内容仅供参考学习,如有侵权请联系我删除!
如果这篇文章对您有帮助,左下角的大拇指就是对博主最大的鼓励。
您的鼓励就是博主最大的动力!

你可能感兴趣的:(Java基础语法)