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

【JVM】JVM栈帧中的动态链接 与 Java的面向对象特性--多态

栈帧

每一次方法调用都会有一个对应的栈帧被压入栈(虚拟机栈)中,每一个方法调用结束后,都会有一个栈帧被弹出。

每个栈帧中包括:局部变量表、操作数栈、动态链接、方法返回地址。

在这里插入图片描述
JavaGuide:Java内存区域详解(重点)

动态链接

动态链接:指向运行时常量池中该栈帧所属方法的引用。在这里插入图片描述在这里插入图片描述

多态

多态允许不同类的对象对同一消息做出响应,但表现出不同的行为(即方法的多样性)。

多态其实是一种能力——同一个行为具有不同的表现形式;换句话说就是,执行一段代码,Java 在运行时能根据对象类型的不同产生不同的结果。

多态的前置条件有三个:

  • 子类继承父类
  • 子类重写父类的方法
  • 父类引用指向子类的对象

多态的目的是为了提高代码的灵活性和可扩展性,使得代码更容易维护和扩展。比如说动态绑定,允许在程序在运行时再确定调用的是子类还是父类的方法。

现在有一个父类 Wanger,一个子类 Wangxiaoer,都有一个 write 方法。引用 wanger 的类型是父类的 Wanger,那在执行 wanger.write() 时,究竟该调用父类 Wanger 的 write() 方法,还是子类 Wangxiaoer 的 write() 方法呢?

答案是在运行时根据对象的类型进行后期绑定,编译器在编译阶段并不知道对象的类型,但是 Java 的方法调用机制能找到正确的方法体,然后执行,得到正确的结果。

在这里插入图片描述


http://www.kler.cn/a/299158.html

相关文章:

  • 系统工程建模MBSE
  • 【STM32 Blue Pill编程】-定时器计数模式
  • 网络编程(学习)2024.9.5
  • WINDOWS下0-1编译ESP-AT
  • JAVA今日分享-30道常见的Java+MyBatis面试题
  • SQLite 与 Java 的集成
  • 鼠标点击来动态确定 HSV 范围
  • QT Creater实现国庆节主题项目【0基础完成版】
  • 算法工程师重生之第三天( 链表理论基础 移除链表元素 设计链表 反转链表 )
  • 【PostgreSQL教程】PostgreSQL 高级篇之子查询
  • Linux——redis主从复制、集群模式、哨兵模式
  • 漫谈设计模式 [10]:享元模式
  • 机器学习和深度学习的区别是什么?
  • 插槽slot
  • Linux环境常用的一些网络相关的命令
  • 【Linux】循序进阶学运维-服务篇-tomcat入门
  • Linux:从入门到放弃
  • mysql5.7安装
  • ros2中使用launch.xml启动时,怎么在命令行里设置参数,或者加载参数文件(params.yaml)
  • 版权与开源协议:一场创新与自由的边界之争