行业资讯 2025年08月6日
0 收藏 0 点赞 316 浏览 1733 个字
摘要 :

文章目录 1. 什么是多态性? 2. 多态性的类型 2.1. 编译时多态性 2.2. 运行时多态性 三、结论 Java 中的多态性是指创建在不同编程上下文中表现不同的成员函数或字段……




  • 1. 什么是多态性
  • 2. 多态性的类型
    • 2.1. 编译时多态性
    • 2.2. 运行时多态性
  • 三、结论

Java 中的多态性是指创建在不同编程上下文中表现不同的成员函数或字段的能力。它与继承、抽象和封装一样,是面向对象编程的主要特性之一。

1. 什么是多态性?

多态性允许一个类在不同的上下文中表现出不同的行为。我们可以将多态性与一个接口具有多个实现联系起来。虽然接口定义的约定保持不变,但每个类对约定的实现不同,从而展现出不同的行为。这就是多态性行为。

例如,多态性还可以指的是子类的实例,具有超类的引用变量。

Object o = new Object(); //o can hold the reference of any subtype

Object o = new String();
Object o = new Integer();

这里,String和Integer类是Object类的子类。

2. 多态性的类型

在Java语言中,多态本质上被认为有两种形式:

  • 编译时多态(静态绑定或方法重载)
  • 运行时多态性(动态绑定或方法重写)

这里,重要的是要了解这些划分是特定于 java 的。在软件工程的背景下,还有其他形式的多态性也适用于不同的语言,但对于java来说,主要考虑这两种。

2.1. 编译时多态性

由于含义是隐式的,在编译时多态性中,控制流是在编译时本身决定的。它是通过方法重载来实现的。

在方法重载中,一个对象可以有两个或多个同名的方法,但方法参数不同,例如:

  • 参数个数不同
  • 方法参数类型不同

例如,在Calculator类中,我们可以有多个具有不同参数类型的方法:

public class Calculator {

  public Integer sum(Integer a, Integer b) {
    return a + b;
  }

  public Float sum(Float a, Float b) {
    return a + b;
  }

  public Double sum(Double a, Double b) {
    return a + b;
  }
}

通过上面的类定义,当我们在程序中调用sum()方法时,编译器根据参数类型仅在编译时决定调用哪个方法,并生成相应的字节码。这称为编译时多态性。

Calculator calc = new Calculator();

Integer sum1 = calc.sum(1 ,2);
Float sum2 = calc.sum(1f ,2f);
Double sum3 = calc.sum(1d ,2d);

2.2. 运行时多态性

当我们将一个类扩展到子类时,运行时多态性本质上是指方法重写。在运行时多态中,调用哪个方法是由运行时根据子类的实际实例决定的。

现实世界中的一个简单例子就是动物。应用程序可以拥有Animal类及其专门的子类,例如CatDog。这些子类将覆盖类提供的默认行为Animal,以及它自己的一些特定行为。

class Animal {

  public void makeNoise() {
    System.out.println(\"Some sound\");
  }
}

class Dog extends Animal {

  public void makeNoise() {
    System.out.println(\"Bark\");
  }
}

class Cat extends Animal {

  public void makeNoise() {
    System.out.println(\"Meawoo\");
  }
}

现在,当我们调用该makeNoise()方法时,调用的方法取决于运行时创建的实际实例的类型。

Animal cat = new Cat();
cat.makeNoise(); //Prints Meowoo

Animal dog = new Dog();
dog.makeNoise(); //Prints Bark

三、结论

  • 多态性是创建具有多种形式的变量、函数或对象的能力。
  • 在java中,多态分为方法重载和方法重写。
  • 还有另一个术语叫作操作符重载(operator overloading)。例如,“+”操作符可以用于添加两个整数,也可以用于连接两个子字符串。在 Java 中,这是唯一可用的操作符重载支持,而且你无法在 Java 中定义自己的自定义操作符重载。

归属教程 Java基础教程

文章目录 前言  第1章 Java语言基础 第2章 流程控制语句 第3章 面向对象编程 第4章 Java 字符 […]

微信扫一扫

支付宝扫一扫

版权: 转载请注明出处:https://www.zuozi.net/9123.html

管理员

上一篇: Java中的多重继承
下一篇: Java中的继承
相关推荐
2025-08-06

文章目录 一、Reader 接口概述 1.1 什么是 Reader 接口? 1.2 Reader 与 InputStream 的区别 1.3 …

988
2025-08-06

文章目录 一、事件溯源 (一)核心概念 (二)Kafka与Golang的优势 (三)完整代码实现 二、命令…

465
2025-08-06

文章目录 一、证明GC期间执行native函数的线程仍在运行 二、native线程操作Java对象的影响及处理方…

348
2025-08-06

文章目录 一、事务基础概念 二、MyBatis事务管理机制 (一)JDBC原生事务管理(JdbcTransaction)…

456
2025-08-06

文章目录 一、SnowFlake算法核心原理 二、SnowFlake算法工作流程详解 三、SnowFlake算法的Java代码…

517
2025-08-06

文章目录 一、本地Jar包的加载操作 二、本地Class的加载方法 三、远程Jar包的加载方式 你知道Groo…

832
发表评论
暂无评论

还没有评论呢,快来抢沙发~

助力内容变现

将您的收入提升到一个新的水平

点击联系客服

在线时间:08:00-23:00

客服QQ

122325244

客服电话

400-888-8888

客服邮箱

122325244@qq.com

扫描二维码

关注微信客服号