重载 overload 和重写 overried 的区别

简介: 本内容介绍了面向对象编程中的“重载”与“重写”概念。重载指同一类中方法名相同但参数列表不同,由编译器在编译阶段根据参数选择方法;重写指父子类中方法名与参数列表均相同,由虚拟机在运行时根据对象实际类型确定调用哪个方法。内容还包含代码示例及重写的检查方式(如 @Override 注解),并强调了重写时访问修饰符、异常类型和返回值类型的规则。
  • 重载是对象的方法之间,它们方法名相同,但方法的参数列表不同
  • 重写是父子类(包括接口与实现类)中两个同名方法,它们方法名相同,且方法的参数列表相同
  • 重载在编译阶段,由编译器根据传递给方法的参数来区分方法
  • 而重写是在运行阶段,由虚拟机解释器去获取引用对象的实际类型,根据类型才能确定该调用哪个方法
  • 有没有发生重写,可以使用 @Override 来检查
// 重载
MyObject obj = ...
obj.test(123);   // 应该是调用 test(int x) 这个方法
obj.test("abc"); // 应该是调用 test(String x) 这个方法
// 重写
Super obj = ...
obj.test();     // 到底是调用父类,还是子类的 test 方法,必须检查引用对象的实际类型才能确定
  • 重载是编译时由编译器来区分方法,而重写是运行时由解释器来区分方法
  • 重写时,子类方法的访问修饰符要 >= 父类方法的访问修饰符
  • 重写时,子类方法抛出的检查异常类型要 <= 父类方法抛出的检查异常类型,或子类不抛异常
  • 重写时,父子类的方法的返回值类型要一样,或子类方法返回值是父类方法返回值的子类
相关文章
|
Java
Java基础语法与面向对象
重载(Overload)指同一类中方法名相同、参数列表不同,与返回值无关;重写(Override)指子类重新实现父类方法,方法名和参数列表必须相同,返回类型兼容。重载发生在同类,重写发生在继承关系中。
337 1
|
8月前
|
安全 Java 编译器
【泛型】泛型:泛型擦除、通配符、上下界限定
Java泛型通过类型参数实现代码复用与编译期类型安全。其核心是**类型擦除**(运行时泛型信息被擦除,兼容旧JVM),配合**通配符**(`?`、`? extends T`、`? super T`)解决类型不变性问题,并依**上下界限定**约束类型范围。遵循PECS原则(生产者用extends,消费者用super),兼顾安全与灵活。
|
5月前
|
缓存 人工智能 安全
从 Subagent 到 Agent Team:多 Agent 系统里的两种协作方式
上下文一多就容易乱,Agent 也就容易丢主线:前面确认过的需求,后面可能就忘了;日志里的问题还没处理完,测试结果又进来了;Review 意见一多,原本要改什么也开始变得模糊。 所以,多 Agent 系统里逐渐形成了两种常见协作方式:一种是 Subagent,另一种是 Agent Team。
506 0
从 Subagent 到 Agent Team:多 Agent 系统里的两种协作方式
|
6月前
|
存储 安全 Java
【Java基础】泛型:泛型擦除、通配符、上下界限定(附《思维导图》+《面试高频考点清单》)
本文系统梳理了Java泛型的核心知识体系,主要内容包括: 泛型概述:介绍了泛型的定义、本质和三大优势(类型安全、代码复用、可读性),以及泛型类、接口和方法的三种使用形式。 泛型擦除:深入解析了Java泛型实现的核心机制,包括擦除规则(无界类型擦除为Object,有界类型擦除为第一个边界类型)、擦除带来的问题(如无法使用instanceof、创建泛型数组等)及其解决方案。 泛型通配符:详细讲解了三种通配符类型(无界通配符、上界通配符和下界通配符)的语法、语义和使用场景。
|
7月前
|
NoSQL 算法 Java
【分布式】分布式核心组件——分布式锁:Redis/ZooKeeper/etcd 实现方案(附全方位对比表)、优缺点、Redlock、时钟回拨问题
本文系统解析分布式锁原理与实践,涵盖Redis/ZooKeeper/etcd三大方案、Redlock算法、时钟回拨等核心议题,兼具深度、广度与落地性,助你构建高可用、强一致的分布式并发控制能力。
1165 4
|
机器学习/深度学习 存储 人工智能
三问一图万字拆解DeepSeek-R1:训练之道、实力之源与市场之变
本文是作者基于自己的学习经历重新组织的一篇更易于初心者理解的关于DeepSeek的文章,也可以说是作者阶段性的学习笔记。
919 43
三问一图万字拆解DeepSeek-R1:训练之道、实力之源与市场之变
|
12月前
|
数据采集 JSON API
在Scrapy中如何处理API分页及增量爬取
在Scrapy中如何处理API分页及增量爬取
|
JSON 移动开发 网络协议
gRPC不是银弹:为内网极致性能,如何设计自己的RPC协议?
自研RPC协议针对内网高并发场景,通过精简帧头、长度前缀解决TCP拆包粘包,支持灵活扩展与高效序列化,显著提升性能与资源利用率,适用于对延迟敏感的分布式系统。
667 4
|
Web App开发 运维 数据库
《跳出“技术堆砌”陷阱,构建可演进的软件系统》
本文批判了当下软件开发中“技术堆砌”“盲目追新”的误区,指出优秀架构应基于业务本质实现“精准设计”。通过分析“过度设计”与“设计不足”的典型案例,阐明架构需平衡业务规模、增长预期与团队能力。针对微服务“伪落地”、技术选型跟风等问题,提出“业务域驱动拆分”“问题导向选型”等解决方案,并以“增量优化”的架构演进实例,强调架构应是“动态生长的生命体”。最终指出,架构设计需从“技术驱动”转向“业务驱动”,以务实、前瞻的思维构建可演进的软件系统。
518 3
|
自然语言处理 并行计算 算法
cp-sat求解器介绍及使用案例
cp-sat求解器介绍及使用案例 更多文章欢迎关注我的微信公众号:Python学习杂记
5656 1