首页 > 其他分享 >多态

多态

时间:2024-08-02 09:51:11浏览次数:14  
标签:重写 调用 子类 多态 父类 方法

多态

1.多态的概念

多态是同一个行为具有多个不同表现形式或形态的能力。

多态就是同一个接口,使用不同的实例而执行不同操作,如下图

img

多态性是对象多种表现形式的体现。

现实中,比如我们按下 F1 键这个动作:

  • 如果当前在 Flash 界面下弹出的就是 AS 3 的帮助文档;
  • 如果当前在 Word 下弹出的就是 Word 帮助;
  • 在 Windows 下弹出的就是 Windows 帮助和支持。

同一个事件发生在不同的对象上会产生不同的结果。

2.多态的好处

  • \1. 消除类型之间的耦合关系
  • \2. 可替换性
  • \3. 可扩充性
  • \4. 接口性
  • \5. 灵活性
  • \6. 简化性

3.多态的分类

  1. 编译时多态(静态多态):主要通过方法重载(Overloading)实现。方法重载是指在同一个类中定义多个同名方法,但这些方法的参数列表不同(参数个数、类型或顺序不同)。在编译时,Java编译器根据方法调用的参数列表确定具体调用哪个方法。
  2. 运行时多态(动态多态):主要通过方法重写(Overriding)和父类引用指向子类对象实现。当子类继承了父类并重写了父类中的某些方法时,通过父类引用调用这些方法时,实际执行的是子类中的方法实现。这种多态性在运行时确定,因此称为运行时多态。

4.多态的机制原理

Java中多态的机制原理主要涉及方法的重写(Overriding)和方法的动态绑定(Dynamic Binding)。多态允许一个引用变量在运行时指向多种实际类型的对象,并根据对象的实际类型调用相应的方法。以下是Java中多态机制原理的详细解释:

4.1. 方法的重写

  • 定义:在子类中定义一个与父类同名、参数列表相同但方法体不同的方法,称为方法的重写。

  • 作用:子类通过重写父类的方法,可以提供自己特有的实现。

  • 规则

    • 方法名、参数列表必须相同。
    • 返回类型可以与父类方法相同,也可以是父类返回类型的子类型(Java 5及以后版本支持协变返回类型)。
    • 访问权限不能比父类中被重写的方法的访问权限更低(但可以更高)。
    • 抛出的异常不能比父类中被重写的方法声明的异常更广泛(但可以更具体或不抛出异常)。

4.2. 方法的动态绑定

  • 定义:在Java中,方法的调用是在运行时根据对象的实际类型来确定的,这种机制称为方法的动态绑定(也称为晚期绑定或动态多态)。

  • 原理

    • 编译时:编译器只能根据引用变量的类型(即编译时类型)来确定可以调用哪些方法,但它无法确定具体调用哪个子类的方法。
    • 运行时:当方法被调用时,JVM会根据对象的实际类型(即运行时类型)来查找并调用相应的方法实现。
  • 实现:通过方法表(Method Table)来实现。每个Java对象都有一个指向方法区的指针,这个指针指向的方法区中包含该对象所属类的所有方法(包括从父类继承的方法)。当方法被调用时,JVM会根据对象的实际类型查找方法表,找到对应的方法实现并调用。

4.3. 多态的实现条件

  • 继承的存在:多态基于继承,没有继承就没有多态。
  • 子类重写父类的方法:子类通过重写父类的方法,提供自己特有的实现。
  • 父类引用变量指向子类对象:这是多态性的具体表现,即可以通过父类类型的引用变量来调用子类对象的方法。

标签:重写,调用,子类,多态,父类,方法
From: https://www.cnblogs.com/tubby233/p/18338065

相关文章

  • 【C++】多态
    什么是多态?就是不同对象在完成某个行为时,会产生不同的形态多态分为静态多态和动态多态静态多态在编译期间就确定执行哪个函数,主要包含:函数重载和运算符重载静态多态函数的地址早绑定-在编译阶段确定函数的地址动态多态派生类和虚函数实现的运行阶段的多态动态多态函数......
  • 深入探讨C++编译期多态:提高效率与安全性
    目录一、引言二、编译期多态技术详解函数重载(FunctionOverloading)运算符重载(OperatorOverloading)模板元编程(TemplateMetaprogramming)使用std::enable_if实现条件模板特化使用ifconstexpr实现编译期条件分支SFINAE(SubstitutionFailureIsNotAnError)CRTP(Curious......
  • Java--多态和抽象类
    目录多态实现多态的条件重写重写和重载静态绑定和动态绑定向上转型和向下转型向上转型向下转型instanceof抽象类多态在Java中多态就是在完成一件事的时候,不同人去完成产生的结果不同比方说打印,我们就是要打印一个东西,如果我们交给彩色打印机,那么会打印出来彩色......
  • 代码大全多态
    尽量使用多态,避免大量的类型检查频繁重复出现的case语句有时是在暗示,采用继承可能是种更好的设计选择--尽管并不总是如此   在面向对象编程中,多态是一种允许你通过一个接口使用多种类型对象的方法。在你提供的例子中,使用`switch`或`case`语句来根据不同的形状类型调......
  • Java多态----继承
    一、基本概念关键字:extends    在java中,一个类(类A)继承另一个类(类B)是指类A能够直接使用类B的所有非构造方法和所有非私有属性(注意:不是不能使用是不能直接使用),并在类B原有的基础上继续进行扩充和延伸,即关键字extends的含义。通常,我们称类A与类B的关系为继承关系,继承方(......
  • Java多态----重写
    一、重写与重载    在学习重写之前,我们需要将它和重载进行区分:方法的重载,发生在同一个类中,方法名相同,参数列表不同,返回值无关。可参考上一篇文章中一个类中不同的构造方法,其也属于重载。详情可见于Java多态----继承-CSDN博客-------------------------------------......
  • Java基础第四弹-----多态、抽象类、接口和异常
    文章目录Java基础知识全解第四弹一、final1.概述2.使用场景3.总结二、继承中的构造方法三、前景知识1.Object2.toString()3.instanceof4.equals()四、多态1.多态定义2.多态条件3.两种转型方式3.1向上转型3.2向下转型4.为什么要转型五、抽象类1.定义2.格式3.抽象......
  • 小一保姆级 python三大核心多态、抽象类、动态添加内容详解
    一.多态多态是面向对象编程中的一个核心概念,它允许一个接口被多个数据类型实现。这意味着,即使多个类具有不同的内部实现,它们也可以共享一个公共接口。多态的实现通常依赖于继承和方法重写。继承:子类继承父类的属性和方法。方法重写:子类重写父类中的方法,以提供特定的实现。......
  • C++ 多态
    多态基本概念多态是C++面向对象三大特性之一多态分为两类静态多态:函数重载和运算符重载属于静态多态,复用函数名动态多态:派生类和虚函数实现运行时多态静态多态和动态多态区别:静态多态的函数地址早绑定——编译阶段确定函数地址动态多态的函数地址晚绑定——运行阶段确......
  • 模块3 面向对象编程高级 --- 第十章:实现多态
    第十章实现多态主要知识点1、多态的定义2、实现多态的条件学习目标理解多态的含义,掌握多态的使用方法,所谓多态:多种状态。在面向对象语言中,接口中定义的抽象方法的多种不同实现方式即多态。10.1创建多态的条件10.1.1多态的定义首先多态的作用是什么呢?......