Java 多态

Java 多态

文章目录

在这里插入图片描述

多态

  1. 什么是多态?为什么要使用多态?
    简单来说是多种形态,具体来说是去完成某个事情,当不同对象去完成同一件事表现出来的不同结果/状态

打个比方就是同一个人对待不同人表现出来的形态是不同的

在这里插入图片描述


2. 多态实现的三个条件:

在这里插入图片描述

向上转型和向下转型

在这里插入图片描述

向上转型和重写

  1. 将子类对象给父类类型的引用
    父类类型 对象名 = new 子类类型()

直接赋值的

classAnimal{publicString name;publicint age;publicAnimal(String name,int age){this.name = name;this.age = age;}// 父类中的this是当前对象的引用publicvoideat(){System.out.println(this.name +" ");}}classDogextendsAnimal{publicDog(String name,int age){super(name,age);// 调用父类的构造方法进行从父类继承过来的成员的构造}publicvoidback(){System.out.println(this.name +"汪汪汪 ");}}publicclass test {publicstaticvoidmain(String[] args){// 向上转型Animal animal =newDog("小白",3); animal.eat();// 调用父类自己的eat}}
  1. 传返回值的向上转型

第二种向上转型,传参的

在这里插入图片描述
在这里插入图片描述
  1. 重写的三个条件:
    父类实现的方法不满足你需要的功能的时候可以进行重写

a. 方法的返回值一样
方法名一样
方法的参数列表一样

b. 被重写的方法的访问修饰限定符子类中的要大于等于父类的

权限大小:private < 默认的 < protected < public

c. 被private的方法是不能被重写的

d. 被static修饰的方法是不能被重写的

e. 被final修饰的方法是不可以被重写的,因为具有了常性

f. 构造方法也是不可以被重写的

publicfinalvoideat(){// ...}

被重写的方法返回值类型可以不同,但必须是父子关系

在这里插入图片描述

重写:在子类和父类中有同名的方法,
这时候子类对象给父类类型的引用(向上转型),使用该对象再调用,调用的是子类的方法,不再是父类的方法
上面的过程叫做动态绑定

下面是子类重写了父类的eat

在这里插入图片描述

@override可以提示你重写是否写错了,提示语法错误

在这里插入图片描述

重写和重载的区别

在这里插入图片描述
  1. object类是所有类的父类

Dog类重写了自己的toString,就使用自己的toString
没有重写就调用父类的toString

在这里插入图片描述

动态绑定和静态绑定

  1. 静态绑定:在编译的时候就确定了调用哪个方法,比如重载

动态绑定:在编译的时候不能确定,在运行时确定调用哪个方法,比如重写

在这里插入图片描述


在这里插入图片描述

用代码来解释什么是多态

在这里插入图片描述

不能调用子类特有的方法,只能调用父类的方法,重写啦才调用子类的方法(而且是同一个名字的方法,比如eat())

在这里插入图片描述

向下转型

  1. 父类对象给子类类型的引用

如果animal引用的对象是Cat对象的实例,如果是就成功,不是就走下面的打印

在这里插入图片描述

向下转型不安全

在这里插入图片描述

多态的优点

  1. 能够降低代码的圈复杂度,避免使用大量的if-else
  2. 一段代码中条件语句和循环语句出现的个数 , 这个个数就称为 " 圈复杂度 ".

不使用多态,打印下列图形?

classShape{publicvoiddraw(){System.out.println("画图");}}classRectextendsShape{@Overridepublicvoiddraw(){System.out.println("⬜");}}classCycleextendsShape{@Overridepublicvoiddraw(){System.out.println("⚪");}}classFlowerextendsShape{@Overridepublicvoiddraw(){System.out.println("❀");}}classTest2{publicstaticvoiddrawShapes(){Rect rect =newRect();Cycle cycle =newCycle();Flower flower =newFlower();String[] shapes ={"cycle","rect","cycle","rect","flower"};for(String shape : shapes){if(shape.equals("cycle")){ cycle.draw();}elseif(shape.equals("rect")){ rect.draw();}else{ flower.draw();}}}publicstaticvoidmain(String[] args){drawShapes();}}

使用多态

publicstaticvoidmain(String[] args){Shape shapes ={newCycle(),newRect(),newCycle(),newRext(),newFlower()};// 向上转型for(Shape shape : shapes){ shape.draw();}}
  1. 可扩展能力强
    如果要新增一种新的形状,使用多态该代码成本也比较低
classFlowerextendsShape{publicvoiddraw(){System.out.println("花!");}}
  1. 属性没有多态
    当父类的成员变量和子类的成员变量同名时,通过父类引用,只能访问父类的变量
  2. 构造方法是没有多态的,因为不能重写,重写会造成构造的混乱
在这里插入图片描述


在这里插入图片描述

总结

  1. 向上转型有什么用?
    是重写的前提,一个子类对象给父类类型的引用
  2. 动态绑定有什么用?
    是实现多态的基础,在编译的时候不确定调用哪个方法,在运行的时候确定调用哪个方法
    动态绑定在编译时显示地是调用父类的方法,但是在运行时显示的是调用子类重写父类的方法

多态主要就是下图中的三点

在这里插入图片描述

Read more

2025睿抗机器人大赛智能侦查赛道省赛全流程

2025睿抗机器人大赛智能侦查赛道省赛全流程

2025睿抗机器人大赛智能侦查赛道省赛全流程——基础入门 安装好Ubuntu系统和ROS 1. 安装Ubuntu 首先需选择与目标 ROS 版本匹配的 Ubuntu 系统镜像(如 ROS Noetic 对应 Ubuntu 20.04、ROS Humble 对应 Ubuntu 22.04),从 Ubuntu 官网下载正版镜像文件;接着使用 U 盘启动盘制作工具(如 Rufus),将镜像写入空白 U 盘并设置为可引导模式;随后将制作好的 U 盘插入待安装设备(一般选择自己的笔记本电脑),重启设备并通过快捷键(不同的电脑按键不同,大家自行搜索)进入 BIOS 设置 U 盘为第一启动项;进入 Ubuntu 安装界面后,按需选择

By Ne0inhk
从零开始使用ISSACLAB训练自己的机器人行走

从零开始使用ISSACLAB训练自己的机器人行走

ISAACLAB入门教程 作者:陈维耀 1. 环境配置 1.1 推荐配置 * 操作系统: Ubuntu 22.04 LTS * 显卡: NVIDIA RTX 4080或以上 1.2 ubuntu 22.04 LTS安装 参考ZEEKLOG的Ubuntu 16.04 LTS安装教程,将其中的ubuntu 16.04镜像文件替换为ubuntu 22.04镜像文件,其他步骤保持不变,建议/home与/usr的硬盘容量均不少于200G。 1.3 安装NVIDIA驱动 根据自身显卡型号与操作系统,选择对应的显卡驱动,建议选择550.xxx.xxx版本的显卡驱动,按照教程进行安装即可,安装完成后在终端输入nvidia-smi,若出现以下信息则表示驱动安装成功: Thu Jun 5

By Ne0inhk
【征文计划】AR健身教练:形随心动 - 基于Rokid CXR-M SDK的实践落地

【征文计划】AR健身教练:形随心动 - 基于Rokid CXR-M SDK的实践落地

一、项目背景与创意起源 在当今快节奏的都市生活中,健身已成为许多人保持健康的重要方式。然而,居家健身面临一个普遍痛点:缺乏专业指导,容易因动作不规范导致运动损伤,同时低头看手机或平板的体验也大大降低了健身的沉浸感和效率。 根据《2024年中国健身行业白皮书》显示,超过65%的居家健身用户表示"缺乏专业指导"是他们放弃健身的主要原因。而Rokid Glasses作为一款轻量级AR眼镜,其独特的"抬头即见"交互方式,为解决这一问题提供了绝佳的硬件基础。 "形随心动"创意的诞生源于一个简单但关键的观察:如果能将专业教练"投射"到用户视野中,实时指导动作,同时提供直观的数据反馈,那么居家健身体验将发生质的飞跃。通过Rokid CXR-M SDK的AI场景、自定义页面和提词器功能,我们能够实现这一愿景。 二、Rokid CXR-M SDK 相关 1. Rokid

By Ne0inhk
Trae x 图片素描MCP一键将普通图片转换为多风格素描效果

Trae x 图片素描MCP一键将普通图片转换为多风格素描效果

目录 * 前言 * 一、核心工具与优势解析 * 二、操作步骤:从安装到生成素描效果 * 第一步:获取MCP配置代码 * 第二步:下载 * 第三步:在 Trae 中导入 MCP 配置并建立连接 * 第四步:核心功能调用 * 三、三大素描风格差异化应用 * 四.总结 前言 在设计创作、社交媒体分享、教育演示等场景中,素描风格的图片往往能以简洁的线条突出主体特征,带来独特的艺术质感。然而,传统素描效果制作需借助专业设计软件(如Photoshop、Procreate),不仅操作复杂,还需掌握一定的绘画技巧,难以满足普通用户快速生成素描的需求。 为解决这一痛点,本文将介绍蓝耘MCP广场提供的图片素描MCP工具(工具ID:3423)。该工具基于MCP(Model Context Protocol)协议开发,支持单张/批量图片转换、3种素描风格切换及自定义参数调节,兼容多种图片格式与中文路径,无需专业设计能力,

By Ne0inhk