【Java-Day10】多态

一.什么是多态

1.1 什么是多态

多态就是同一个父类引用 ,指向不同的子类对象,调用同一个方法时,表现出不同的效果。

1.2 为什么叫多态

"多态"就是"事物的多种形态"。同一个类型,可以表现成不同对象,同一个方法,可以有不同结果。

1.3 多态的表现形式

把子类对象 直接赋值给他的父类类型。

父类类型 对象名称 = 子类对象;

java 复制代码
Fu f = new Zi();

1.4 多态的前提

  1. 有继承/实现关系
  2. 有方法重写(不是必须,子类没有重写时,会调用父类方法)
  3. 父类引用指向子类对象(Fu f = new Zi(); )

二.多态调用成员的特点和弊端及解决方案

变量调用:编译看左边 ,运行也看左边

方法调用:编译看左边 ,运行看右边

2.1 调用成员变量:编译看左边,运行也看左边

  • 编译看左边:在把java文件编译成class文件的时候,看父类当中有没有这个变量,如果有编译成功,如果没有纳
  • 运行也看左边:在代码真正运行的时候,使用父类中的变量

2.2 调用成员方法:编译看左边,运行看右边

  • **编译看左边:**看父类当中有没有这个方法,如果没有代码报错
  • 运行看右边: 在代码真正运行的时候,运行的是子类里面的方法。如果子类没有重写父类里面的方法,使用的还是父类

2.3多态的弊端

他不能调用子类的特有方法,如果如果调用的方法父类里面没有,在编译时就会出错。调用的方法在父类里面有,运行时就会去找子类里重写的方法。如果子类没有重写,才会用父类的方法。

解决多态的弊端:使用类型转换。把对象再转会子类类型就可以

2.4 引用数据类型的转换

  • 自动类型转换(向上转型,从子到父):子类对象赋值给父类类型的变量(多态)
  • 强制类型转换(向下转型,从父到子):子类 对象变量=(子类)父类类型的变量
java 复制代码
Person p = new Student();//多态(从小到大自动类型转换)
Student s = (Student)p;//(强制类型转换,可以调用子类独有的功能)

强制类型转换能解决

可以把父类转换成真正的子类类型,从而调用子类独有功能。

强制类型转换需要注意

  • 转换类型与真实对象类型不一致会报错
  • 转换的时候用instanceof关键字进行判断
相关推荐
考虑考虑5 小时前
JDK26中的Map.ofLazy
java·后端·java ee
鶴哥只手遮天8 小时前
Spring AI 2.0.1 深度解析-第 14 章 MCP 服务端(上):注解式实现与工具来源
java·人工智能·开源
鶴哥只手遮天8 小时前
Spring AI 2.0.1 深度解析-第 15 章 MCP 服务端(下):三种协议形态、Streamable 传输与状态管理
java·人工智能·开源
鶴哥只手遮天8 小时前
Spring AI 2.0.1 深度解析-第 16 章 向量存储(上):`VectorStore` 接口体系、`BatchingStrategy`
java·人工智能·开源
鶴哥只手遮天8 小时前
Spring AI 2.0.1 深度解析-第 12 章 工具循环的流式形态、Usage 累加与扩展体系
java·人工智能·开源
鶴哥只手遮天8 小时前
Spring AI 2.0.1 深度解析-第 23 章 模型供应商实现:从 `OpenAiSetup` 到 Bedrock
java·人工智能·开源
鶴哥只手遮天9 小时前
Spring AI 2.0.1 深度解析-第 06 章 内置 Advisor 全景:13 个实现逐个剖到源码级
java·人工智能·开源
鶴哥只手遮天9 小时前
Spring AI 2.0.1 深度解析-第 03 章 消息体系与 Prompt:不可变模型、`ChatOptions` 与模板渲染
java·人工智能·开源
鶴哥只手遮天9 小时前
Spring AI 2.0.1 深度解析-第 24 章 生产实践与 2.x 迁移:陷阱清单、AOT 与调优
java·人工智能·开源
鶴哥只手遮天9 小时前
Spring AI 2.0.1 深度解析-第 10 章 工具调用(中):执行链路、结果转换与工具限制
java·人工智能·开源