多态理解

简介: 多态理解

面向对象特征:多态性

  • 多态性,是面向对象中最重要的概念,在Java中的体现:
  • 对象的多态性:父类的引用指向子类的对象
  • 可以直接应用在抽象类和接口上
  • Java引用变量有两个类型:编译时类型运行时类型。编译时类型由声明 该变量时使用的类型决定,运行时类型由实际赋给该变量的对象决定。简称:编译时,看左边;运行时,看右边。若
  • 编译时类型和运行时类型不一致,就出现了对象的多态性(Polymorphism)
  • 多态情况下, “看左边” :看的是父类的引用(父类中不具备子类特有的方法)
  • “看右边” :看的是子类的对象(实际运行的是子类重写父类的方法)
  • 对象的多态 —在Java中,子类的对象可以替代父类的对象使用
  • 一个变量只能有一种确定的数据类型
  • 一个引用类型变量可能指向(引用)多种不同类型的对象
Person p = new Student();
Object o = new Person();//Object类型的变量o,指向Person类型的对象
o = new Student(); //Object类型的变量o,指向Student类型的对象

子类可看做是特殊的父类,所以父类类型的引用可以指向子类的对象:向上转型(upcasting)。

  • 一个引用类型变量如果声明为父类的类型,但实际引用的是子类 对象,那么该变量就不能再访问子类中添加的属性和方法
Student m = new Student();
m.school = “pku”; //合法,Student类有school成员变量
Person e = new Student();
e.school = “pku”; //非法,Person类没有school成员变量
属性是在编译时确定的,编译时e为Person类型,没有school成员变量,因而编
译错误。

多态性应用举例

  • 方法声明的形参类型为父类类型,可以使用子类的对象作为实参调用该方法
public class Test {
public void method(Person e) {
// ……
e.getInfo();
}
public static void main(Stirng args[]) {
Test t = new Test();
Student m = new Student();
t.method(m); // 子类的对象m传送给父类类型的参数e
}
}


相关文章
|
存储 自然语言处理 数据处理
PaddleNLP--UIE--小样本快速提升性能(含doccona标注
需求跨领域跨任务:领域之间知识迁移难度高,如通用领域知识很难迁移到垂类领域,垂类领域之间的知识很难相互迁移;存在实体、关系、事件等不同的信息抽取任务需求。 - 定制化程度高:针对实体、关系、事件等不同的信息抽取任务,需要开发不同的模型,开发成本和机器资源消耗都很大。 - 训练数据无或很少:部分领域数据稀缺,难以获取,且领域专业性使得数据标注门槛高。
PaddleNLP--UIE--小样本快速提升性能(含doccona标注
|
监控 Java 数据库连接
SpringBoot四大核心组件,必知必会!
SpringBoot四大核心组件,必知必会!
SpringBoot四大核心组件,必知必会!
|
2月前
|
Java Spring 容器
DI依赖注入的几种手段
本内容介绍了依赖注入的四种方式:构造器注入、接口注入、Setter注入和注解注入,并重点比较了Spring中的@Autowired与Java标准注解@Resource的区别,包括来源和依赖查找策略。
194 0
|
5月前
|
人工智能 中间件 程序员
LLM 不断提升智能下限,MCP 不断提升创意上限
LLM 是大脑,MCP 是手脚。LLM 不断提升智能下限,MCP 不断提升创意上限。所有的应用和软件都会被 AI 改造,将向所有的应用和软件都会被 MCP 改造的新范式演进。
314 26
|
10月前
|
人工智能 自然语言处理 安全
关于claude怎么下载?这篇文章告诉你答案!
Claude 是 Anthropic 公司开发的一款大型语言模型,被誉为下一代 AI 助手 🤖。它拥有强大的文本处理能力,能够进行对话、写作、翻译、总结等多种任务 📝。
|
网络协议 Ubuntu Java
技术笔记:NML工程入门
技术笔记:NML工程入门
|
11月前
|
缓存 NoSQL 应用服务中间件
【开发系列】秒杀系统的设计
【开发系列】秒杀系统的设计
|
9月前
|
缓存 JSON NoSQL
为什么是删除缓存,而不是更新缓存?
本文介绍了数据库与缓存一致性的常见方案——Cache-Aside Pattern(旁路缓存模式),并分析了其工作流程及优势。该模式通过应用程序显式管理缓存,确保数据一致性。文章详细探讨了删除缓存而非更新缓存的原因,包括避免数据不一致、简化操作、减少并发问题及提高性能。删除缓存能有效保证下次请求获取最新数据,尤其在高并发场景下,确保系统的简单性和可靠性。
407 0
|
Java 测试技术 Spring
Java 新手入门:依赖注入的 N 种姿势,总有一款适合你!
Java 新手入门:依赖注入的 N 种姿势,总有一款适合你!
299 2
|
消息中间件 缓存 监控
如何设计一个秒杀系统,(高并发高可用分布式集群)
【7月更文挑战第4天】设计一个高并发、高可用的分布式秒杀系统是一个非常具有挑战性的任务,需要从架构、数据库、缓存、并发控制、降级限流等多个维度进行考虑。
439 1