首页 > 编程语言 >java的多态

java的多态

时间:2025-01-12 19:11:30浏览次数:1  
标签:java 子类 绑定 多态 类型 父类 属性

java的多态:多态时面对对象的第三大特征;

  • 方法的多态:方法的重载【本质:方法是由方法名 + 形参标识】和重写【本质是继承,实现】;
  • 对象的多态:一个对象的声明类型【编译类型】和运行类型可以不一致,这个是多态的本质;
    • 赋值符号左边是声明类型,右边是实际运行;
    • 为什么有多态:
      • 因为子类继承了父类的方法和属性,子类 new 空间内,存在一个独立的空间存放父类的属性,即除了private修饰的变量和方法【也有这些资源,只是不可访问】,子类访问可以其他任何资源;
      • 因此,可以将子类看作特殊的父类,可以赋值给父类引用变量
    • 多态的向上转型
      • 支持访问的成员【方法和属性,遵守访问权限】;
      • 在编译阶段,由声明类型确定,不能调用子类的特有成员;
      • 在运行阶段,与访问成员规则一致,查找的起点:
        • 方法从动态对象开始查找;
        • 属性从声明类型处开始查找;
        • 有,就查看访问权限,可以访问,正常。不可访问,报错。如果没有。再递归到父类,接着判断;
    • 多态的向下转型:【为了避开编译阶段的限制,能访问子类独有方法和属性】
      • 为了避开编译阶段的限制,使用强制类型转换【转换的是父类的引用变量】,将声明的类型转化为子类,此时,编译类型和运行类型一致,在遵守访问权限的情况,能访问一切拥有的成员;
      • 前提是必须存在继承或实现关系,否则报错;
    • 对象的多态性:只适用于方法,但是属性没有多态性
      • 对象的属性是静态绑定:
        • 属性的值在编译和运行都看左边【声明类型】
        • 属性输出的值由声明类型确定,父类和子类的属性,同时存在当前对象中,并且都有构造器显式初始化,所以属性没有重写;
        • 当声明类型没有,递归的到声明类型的父类【遵守相同的查找规律】;
        • 当调用对象属性的时,哪里有声明,那里就使用,【类似于将整个类代码作为一个代码块{},属性就类似于代码块内的变量】
        • 可以通过封装成方法进行动态访问,方法内的对象属性是运行的类型的属性【getter】;
      • 对象的方法是动态绑定:
        • 在运行阶段,当调用方法时,该方法都会和运行类型对象绑定;无论是调用父类方法中的方法的调用,第一反映是去运行类型中查找,然后再递归到父类查找;
  • 编译期间的绑定就是静态绑定,运行期间的绑定就是动态绑定,java为了实现多态的这个机制,选择让方法在运行期间绑定对应对象所对应实际类型,选择让属性在编译期间绑定其所对应实际类型。

标签:java,子类,绑定,多态,类型,父类,属性
From: https://www.cnblogs.com/xiaoxianglu/p/18667175

相关文章

  • Java基础学习(七)
    Java基础学习(七):异常机制目录Java基础学习(七):异常机制概念简单分类异常体系结构异常处理机制自定义异常本文为个人学习记录,内容学习自狂神说Java概念异常指程序运行中出现的不期而至的各种状况,如:文件找不到、网络连接失败、非法参数等异常发生在程序运行期间,它影响了正常的......
  • Java基础学习(七)
    Java基础学习(七):异常机制目录Java基础学习(七):异常机制概念简单分类异常体系结构异常处理机制自定义异常本文为个人学习记录,内容学习自狂神说Java概念异常指程序运行中出现的不期而至的各种状况,如:文件找不到、网络连接失败、非法参数等异常发生在程序运行期间,它影响了正常的......
  • (免费送源码)计算机毕业设计原创定制:Java+springboot+MySQL springboot 第三方游戏账号
    摘要本论文主要论述了如何使用JAVA语言开发一个springboot第三方游戏账号交易平台,本系统将严格按照软件开发流程进行各个阶段的工作,采用springboot+vue.js相结合框架,采用B/S架构,面向对象编程思想进行项目开发。在引言中,作者将论述第三方游戏账号交易平台的当前背景以及系统......
  • (免费送源码)计算机毕业设计原创定制:Java+ssm+MySQL 基于SSM的游戏论坛设计与实现
     摘 要本论文主要论述了如何使用SSM框架开发一个游戏论坛,将严格按照软件开发流程进行各个阶段的工作,采用B/S架构JAVA技术,面向对象编程思想进行项目开发。在引言中,作者将论述游戏论坛的当前背景以及系统开发的目的,后续章节将严格按照软件开发流程,对系统进行各个阶段分析设计......
  • (免费送源码)计算机毕业设计原创定制:Java+springboot+MySQL 物流车辆管理系统的设计与实
     摘要由于数据库和数据仓库技术的快速发展,物流车辆管理系统建设越来越向模块化、智能化、自我服务和管理科学化的方向发展。物流车辆管理系统对处理对象和服务对象,自身的系统结构,处理能力,都将适应技术发展的要求发生重大的变化。物流车辆管理系统除了具有共享系统的全部功能......
  • SpringBoot基于Java的宠物援助平台的设计与实现
    1.引言在当今的软件开发领域,企业级应用的开发和部署速度直接影响着业务的竞争力。SpringBoot以其轻量级、快速启动和强大的集成能力,成为构建现代企业级应用的首选框架。本文将带您深入了解SpringBoot框架的核心特性,并展示如何利用它构建一个高效、可扩展的系统。2.开发......
  • 百万架构师第十六课:源码分析:Spring 源码分析:手写SpringAOP核心原理|JavaGuide
    已完成SpringIOCSpringDISpringMVC继续完善:SpringAOP的功能,基于SpringIOC和DI去完成未完成:SpringAOP、SpringTransaction、SpringJDBC、自己手写ORM框架。​SpringIOC入口,DispatcherServlet,通过DispatcherServlet启动一个ApplicationContext容......
  • JVM内存模型:Java的秘密引擎
    Java虚拟机(JVM)内存模型是Java程序性能优化和代码调优的核心。理解JVM内存模型对于编写高效、稳定的Java程序至关重要。1.1JVM内存模型概述JVM内存模型定义了Java程序中变量的存储位置以及变量在不同线程间可见性、访问权限等规则。它包括以下几个主要部分:方法区(MethodAr......
  • 性能分析工具:Java的秘密探测器
    Java性能分析工具是开发人员用于监控、分析和优化Java应用程序性能的必备工具。以下是一些常用的Java性能分析工具及其特点:1.JProfilerJProfiler是一款功能强大的Java性能分析和调优工具,它提供了深入分析Java应用程序的性能指标的能力,包括CPU分析、内存分析和线程分析。JPr......
  • 代码优化技巧:Java的秘密加速器
    代码优化是提升Java应用程序性能的关键环节。以下是一些有效的代码优化技巧,它们可以被视为Java的秘密加速器:1.选择合适的数据结构和算法选择合适的数据结构和算法对于优化Java性能至关重要。不同的数据结构和算法在时间和空间复杂度上存在差异,因此需要根据具体需求进行选择......