当前位置: 首页 > news >正文

多态底层原理【附原理模型图】

多态底层原理

​ 多态的底层原理是方法后期的动态绑定,由于Java是由C和C++实现的,所以多态的原理和C++是类似的,一个类会对应一个虚函数表,而且Java中的所有非静态的方法、非final修饰的方法、非private方法都是虚函数。假设我们有一个Supper类,定义如下

public class Supper {public void a(){System.out.println("方法A");}// 私有方法不放在虚函数表里private void b(){System.out.println("方法b");}
}

​ 上述类的方法模型图如下:

在这里插入图片描述

假设我们有一个Son类,定义如下

public class Son extends Supper{
}

​ 当子类继承父类时,父类的虚函数表里有的虚函数指针,子类也会有,当方法没有被重写时,子类的虚函数表中继承于父类的虚函数的指针指向父类的方法代码实现,Son类的方法模型图如下:

在这里插入图片描述

​ 现在我们对Son类进行修改,使其重写父类的a方法

public class Son extends Supper{@Overridepublic void a(){System.out.println("重写a");}
}

​ 当子类重写父类的方法之后,会改写虚函数表中的虚函数指针的地址,使其指向子类重写的方法的代码。如下图所示

在这里插入图片描述

​ 此时,我们通过如下代码进行调用

public static void main(String[] args) {Supper instance = new Son();instance.a(); // 输出:重写a}

​ 分析上述代码,创建一个Son对象instance,当调用a()方法时,JVM会查找instance对象的虚函数表,因为Son类重写了a()方法,所以调用的是重写后的a()方法。

​ 总结:当通过父类的引用调用一个方法时,JVM会查找该对象的虚函数表,找到对应方法的虚函数指针并调用,此时查找的是子类的虚函数表,所以调用的方法子类也是重写后的方法,所以就实现了使用父类的引用调用子类的方法,这便是多态的底层原理。


http://www.mrgr.cn/news/52296.html

相关文章:

  • 学习之上下文管理器
  • 提供综合康复服务的武汉自闭症全托管学校
  • 记一次有趣的发现-绕过堡垒机访问限制
  • 如何排查CPU占用率过高的问题
  • Redis过期Key的逐出策略
  • 潜水定位通信系统的功能和使用方法_鼎跃安全
  • JDBC的学习
  • 一个标准java程序的创建和使用
  • Oracle 常见索引扫描方式概述,哪种索引扫描最快!
  • DHCP和VRRP协议
  • 公司名称抖音头条百科创建包过包收录
  • 数据结构-B树和B+树
  • 《云端守望者》
  • 视频去水印软件3款推荐:好用的去水印软件分享!
  • FreeRTOS - 中断管理
  • Creo7.0软件安装教程+Creo7.0三维建模中文安装包下载
  • Okhttp3中设置超时的方法
  • 如何使用内网穿透工具配置Termux SFTP公网地址实现WinSCP远程连接
  • 纯干货:C语言中函数栈帧的介绍
  • FFmpeg源码:avformat_new_stream函数分析