浅谈Java中的多态性

简介: 在面向对象程序设计中多态是一个非常重要的特性,理解多态有利于进行面向对象的分析与设计。

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

发生多态要有三个前提条件:


继承。多态发生一定要子类和父类之间。

覆盖。子类覆盖了父类的方法。

声明的变量类型是父类类型,但实例则指向子类实例。

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

示例代码:

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

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

  • 父类中没有的方法不能调用
  • 子类没有重写的方法,执行父类的方法行为
  • 子类重写的方法,执行子类的方法行为
相关文章
|
5月前
|
设计模式 存储 Java
多态性在Java中的应用场景广泛
【4月更文挑战第7天】多态性在Java中的应用场景广泛
74 1
|
5月前
|
Java
在Java中,多态性是通过继承和接口实现的
【4月更文挑战第7天】在Java中,多态性是通过继承和接口实现的
62 1
|
Java
深入理解Java中的多态性
在Java编程中,多态性是一个非常重要的概念。它允许我们以一种灵活的方式处理不同类型的对象,并根据具体的对象类型调用相应的方法。
95 0
|
4月前
|
Java 编译器
在 Java 中,重写(Override)和重载(Overload)是两种不同的概念,用于实现多态性。它们有着不同的作用和使用场景。
在 Java 中,重写(Override)和重载(Overload)是两种不同的概念,用于实现多态性。它们有着不同的作用和使用场景。
|
5月前
|
Java 开发者
在Java中,接口和超类在多态性中扮演着重要的角色
【5月更文挑战第7天】Java中的接口和超类支持多态性,接口作为规范,允许多继承和回调机制;超类提供基类,实现代码重用和方法重写,两者共同促进代码的灵活性和可维护性。
51 10
|
5月前
|
Java
Java一分钟之-多态性:理解重写与接口
【5月更文挑战第9天】本文介绍了Java中的多态性,主要通过方法重写和接口实现。重写允许子类根据实际类型执行不同实现,关键点包括方法签名相同、访问权限不降低以及final、static和abstract方法不可重写。接口是抽象类型,包含抽象方法,提供另一种多态性实现。常见问题包括混淆重载与重写、不理解动态绑定以及滥用接口。为避免问题,需明确重写目的、合理设计接口,并在使用多态时注意类型检查。多态性是提升代码质量和灵活性的关键。
45 1
|
5月前
|
Java
Java语言中的多态性:深入解析与应用
Java语言中的多态性:深入解析与应用
|
5月前
|
Java 编译器
【JAVA学习之路 | 基础篇】面相对象特征--多态性
【JAVA学习之路 | 基础篇】面相对象特征--多态性
|
5月前
|
Java
在Java中,多态性允许不同类的对象对同一消息做出响应
【4月更文挑战第7天】在Java中,多态性允许不同类的对象对同一消息做出响应
48 2
|
5月前
|
Java
Java中的多态性
Java中的多态性
28 0