文章目录

  • 107. Java 继承 - 总结:方法重写与隐藏
        • **详细解释:**
        • **方法重载**
      • **总结**

107. Java 继承 - 总结:方法重写与隐藏

在 Java 中,定义与超类中的方法具有相同签名的方法时,不同类型的方法之间会有不同的行为。以下是一个总结表,帮助您更清晰地理解子类实例方法和静态方法与超类方法的关系:

子类方法类型超类实例方法超类静态方法
子类实例方法重写(Overrides)生成编译时错误
子类静态方法生成编译时错误隐藏(Hides)
详细解释:
  1. 子类实例方法与超类实例方法

    • 当子类中定义的方法与超类的实例方法具有相同的签名(方法名、参数类型和数量、返回类型),子类会重写(override)超类的方法。此时,调用子类的实例方法会使用子类的方法实现,而不再使用超类的方法。

    示例:

    class Animal {public void sound() {System.out.println("Animal sound");}
    }class Dog extends Animal {@Overridepublic void sound() {System.out.println("Bark");}
    }
    

    在这个例子中,Dog 类重写了 Animal 类的 sound() 方法。调用 Dogsound() 方法将输出 “Bark”。

  2. 子类实例方法与超类静态方法

    • 编译时错误:如果子类定义了一个与超类静态方法具有相同签名的方法,将会产生编译时错误。因为静态方法与实例方法不同,静态方法是根据类来调用的,而实例方法是根据对象来调用的。

    示例:

    class Animal {public static void test() {System.out.println("Static method in Animal");}
    }class Dog extends Animal {// 编译时错误:不能重写静态方法public void test() {System.out.println("Static method in Dog");}
    }
    
  3. 子类静态方法与超类实例方法

    • 编译时错误:如果子类定义了一个与超类实例方法具有相同签名的静态方法,会产生编译时错误。静态方法不能访问实例方法,因此不能与实例方法同名。
  4. 子类静态方法与超类静态方法

    • 隐藏(Hides):当子类中定义的静态方法与超类中的静态方法具有相同签名时,子类的方法将隐藏超类的静态方法。此时,如果从子类调用该方法,将调用子类中的静态方法,而不再调用超类中的静态方法。

    示例:

    class Animal {public static void test() {System.out.println("Static method in Animal");}
    }class Dog extends Animal {public static void test() {System.out.println("Static method in Dog");}
    }public class Main {public static void main(String[] args) {Animal.test();  // 输出: Static method in AnimalDog.test();     // 输出: Static method in Dog}
    }
    

    在这个例子中,Dog 类隐藏了 Animal 类的 test() 静态方法,因此调用 Dog.test() 会输出 “Static method in Dog”,而调用 Animal.test() 会输出 “Static method in Animal”。

方法重载

值得注意的是,在子类中,方法重载与方法重写是不同的。重载是指在同一个类中,定义多个方法名称相同但参数不同(包括类型、数量或顺序)的多个方法。重载的的方法既不隐藏也不覆盖超类的实例方法,而是视为新方法,对子类来说是唯一的。

示例:

class Animal {public void speak() {System.out.println("Animal speaks");}
}class Dog extends Animal {// 重载方法,不是覆盖public void speak(int times) {System.out.println("Dog barks " + times + " times");}
}

在这个例子中,Dog 类中的 speak(int times) 方法是重载的方法,不会覆盖超类中的 speak() 方法。Dog 类仍然保有父类的 speak() 方法,并且可以定义自己的重载方法。


总结

  • 实例方法重写:子类可以重写超类的实例方法,覆盖父类的实现。
  • 静态方法隐藏:子类可以隐藏超类的静态方法,调用哪个版本的方法取决于对象的引用类型。
  • 方法重载:子类可以重载超类的方法,重载的方法是新的,与超类实例方法无关。

通过理解这些基本规则,学员可以清晰地掌握方法重写与静态方法隐藏的概念,避免在多态和继承中出现常见的错误。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/87470.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/87470.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/87470.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Cloud使用Eureka调用接口,超时设置(二)

在 Spring Cloud 微服务架构中,当同时配置了 Ribbon 和 Feign 的超时时间时,Feign 的配置优先级高于 Ribbon。具体规则和底层逻辑如下: ⚙️ 1. 配置优先级规则 Feign 显式配置 > Ribbon 配置 若在 Feign 中显式设置了超时时间&#xff0…

iOS-SM3加密算法N种集成

近期的一个项目需要用到SM3加密算法,需要在iOS中使用Objective-C实现SM3国密加密算法。 SM3:是中国国家密码管理局发布的密码杂凑算法标准,适用于商用密码应用中的数字签名和验证、消息认证码的生成与验证以及随机数的生成等 由于iOS系统并未…

[逆向工程]什么是TEB 与 PEB(二十九)

[逆向工程]什么是TEB 与 PEB(二十九) 一、引言:为什么需要了解 TEB/PEB? 在 Windows 系统开发、调试或逆向工程中,TEB(Thread Environment Block) 和 PEB(Process Environment Block) 是理解程序执行机制的关键。它们如同进程与线程的“身份证”,存储了从内存布局到…

逆向分析贝壳网人机验证JS加密逻辑

引言 在数据爬取和自动化测试过程中,人机验证(如滑块、点选、短信验证等)是常见的反爬手段。贝壳网(ke.com)作为国内领先的房产平台,其人机验证机制较为复杂,涉及前端JS加密、动态Token、行为检…

Vue3 + Element Plus中el-table加载状态分析

在 Vue 3 中,当 onMounted 钩子被触发时,父组件的 DOM 已经挂载完成,但子组件(如 el-table)可能尚未完成其内部渲染。具体分析如下: 1. onMounted 的执行时机 父组件挂载完成:onMounted 表示当前…

OpenCV图像拼接技术详解:从特征匹配到全景合成

本文将详细介绍如何使用OpenCV实现两幅图像的自动拼接,涵盖特征提取、单应性矩阵计算和图像融合等关键技术。 一、图像拼接概述 图像拼接是将多张有重叠区域的图像合并成一幅全景图的技术,广泛应用于全景摄影、卫星图像处理、医学影像等领域。其核心技术…

如何通过 5 种方式向 Android 手机添加音乐

想把音乐添加到你的安卓手机,然后随时随地无需网络连接就能欣赏你喜爱的音乐吗?这不再是麻烦。现在,你可以按照本指南中的有效方法,将音乐添加到你的安卓手机上。让我们在安卓手机上聆听我们美妙的歌曲吧。 第 1 部分:…

VS Code 项目中的 .vscode 目录详解

VS Code 项目中的 .vscode 目录详解 .vscode 目录是 VS Code 项目的核心配置中心,它包含特定于当前项目的配置,这些配置覆盖全局设置,确保团队成员获得一致的开发环境体验。 .vscode 目录中的核心文件 文件名作用是否应纳入版本控制settin…

Ubuntu22.04安装opengauss并配置远程访问、JDBC连接

内容概括 最近在研究怎么在ubuntu服务器环境下使用opengauss,看了下官方下载地址没有适配ubuntu的安装包。仔细翻了下官方文档,发现安装指南里有提供一个deb包安装方案,有适配ubuntu,经过实践可行,于是记录下来给有需要…

国产智能体“双子星”:实在Agent vs Manus(核心架构与技术实现路径对比)

2025年,人工智能领域迎来重要转折点——大模型的光环逐渐消散,落地应用成为行业焦点。 正如业内人士所言:“2023年,大家普遍觉得要买一个大模型,但训练完了怎么用起来,大家一头雾水。” 在这一背景下&…

pgAdmin 4 连接 postgreSQL

环境如下: 宿主机为Windows 11postgreSQL安装在宿主机上的Linux虚机中,Hypervisor是VirtualBoxpgAdmin 4 已安装在宿主机上 本文讲述:如何通过宿主机上的pgAdmin 连接到虚拟机中的PG。 设置监听 默认的PG监听主机为localhost,…

HTTP 缓存策略:强缓存与协商缓存的深入解析

在HTTP缓存策略中,强缓存和协商缓存是两种常用的机制,用于减少数据传输和提高网页加载速度。它们通过在客户端和服务器之间建立缓存来避免不必要的网络请求,从而优化性能并提高用户体验。本文将详细介绍这两种缓存策略的原理、优势和适用场景…

Node.js 中的 Token 认证机制详解

文章目录 Node.js 中的 Token 认证机制详解1. Token 认证基础1.1 什么是 Token 认证?1.2 Token 认证流程 2. JWT (JSON Web Token) 实现2.1 安装依赖2.2 生成 Token2.3 验证 Token 中间件 3. 完整实现示例3.1 登录接口3.2 受保护的路由 4. Token 安全最佳实践5. Tok…

23 - HaLoAttention模块

论文《Scaling Local Self-Attention for Parameter Efficient Visual Backbones》 1、作用 HaloNet通过引入Haloing机制和高效的注意力实现,在图像识别任务中达到了最先进的准确性。这些模型通过局部自注意力机制,有效地捕获像素间的全局交互&#xf…

2025Mybatis最新教程(五)

第5章 ORM映射 5.1 MyBatis自动ORM失效 MyBatis只能自动维护库表”列名“与”属性名“相同时的对应关系,二者不同时,无法自动ORM。 自动ORM失效建表 create table t_managers(mgr_id int primary key auto_increment,mgr_name varchar(50),mgr_pwd varchar(50) ); 添加数据…

解决lombok注解失效问题

Lombok 注解失效是 Java 开发中的常见问题,通常由依赖配置、IDE 支持或构建工具设置引起。最近在拉取别人springboot3jdk21版本的项目时遇到了lombok注解失效,导致项目无法启动的问题,以下是我的解决方案: 首先检查idea 的lombok…

3分钟搭建LarkXR实时云渲染PaaS平台,实现各类3D/XR应用的一键推流

LarkXR是由Paraverse平行云自主研发的去中心化实时云渲染平台,以其卓越的性能和丰富完备的功能插件,引领3D/XR云化行业风向标。LarkXR适用于3D/XR开发者、设计师、终端用户等创新用户,可以在零硬件负担下,轻松实现超高清低时延的3…

vue3 watch监视详解

watch监视 一 &#xff1a;watch监视{ref}定义的基本类型结构 <template><div class"person"><h1>情况一:watch监视{ref}定义的基本类型结构</h1><h1>当前的和为{{ sum }}</h1><button click"changeSum">点我…

TensorFlow Serving学习笔记2: 模型服务

本文深入剖析 TensorFlow Serving 的核心架构与实现机制&#xff0c;结合源码分析揭示其如何实现高可用、动态更新的生产级模型服务。 一、TensorFlow Serving 核心架构 1.1 分层架构设计 TensorFlow Serving 采用模块化分层设计&#xff0c;各组件职责分明&#xff1a; 组件…

共享云桌面为什么能打败传统电脑

近年来&#xff0c;随着云桌面技术的快速发展&#xff0c;共享云桌面作为一种新型的计算模式&#xff0c;正在逐步改变人们的工作和生活方式。它凭借其独特的优势&#xff0c;正在逐步取代传统电脑&#xff0c;成为企业和个人用户的新选择。之所以在部分场景中展现出替代传统电…