Java方法重写(overriding method)

2024-04-02 19:32

本文主要是介绍Java方法重写(overriding method),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

基本概念

       在Java中,子类可继承父类中的方法,而不需要重新编写相同的方法。但有时子类并不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写。方法重写又称方法覆盖。 若子类中的方法与父类中的某一方法具有相同的方法名、返回类型和参数表,则新方法将覆盖原有的方法。 如需父类中原有的方法,可使用super关键字,该关键字引用了当前类的父类。

下面是一个简单的例子:

父类:

public class MethodFather {void max(int a, int b) {System.out.println("父类:Using Int");System.out.println(a < b ? a : b);}
}

子类:

public class MethodSon extends MethodFather{@Overridevoid max(int a, int b) {System.out.println("子类:Using Int");System.out.println(a < b ? a : b);}
}

Main:

public class Test_Override {public static void main(String[] args) {//声明一个父类的引用 指向子类的对象MethodFather a = new MethodSon(); a.max(2, 8);//声明一个子类的引用指向子类的对象MethodSon b = new MethodSon(); b.max(3, 9);声明一个子类的引用,指向一个被强制转换成子类 类型 的父类的对象//MethodSon c = (MethodSon) new MethodFather();//编译时不报错,运行时错误//c.max(4, 16);}
}

运行结果:

子类:Using Int

2

子类:Using Int

3

 

Java 方法重写注意事项

1. 子类中的方法与父类中的方法,有相同的返回类型、相同的方法名称、相同的参数列表 

2. 子类中的方法的访问级别,不能低于父类中该方法的访问级别 

3. 子类中方法抛出的异常范围,不能大于父类中方法抛出的异常的范围

:子类中的方法的访问级别不能低于父类中该方法的访问级别,为何呢?假如没有这个限制, 如果Child类的 outPut() 方法的访问级别为 private ,将会与 java 的多态机制发生冲突。Parent parent = new Child(); parent.outPut(); 这里Java 编译器会认为以上是合法的,但在运行时,根据动态绑定规则,Java虚拟机会调用 parent 变量所引用的 Child 实例的 outPut()  方法,而 Child 的 outPut() 方法为 privateJava虚拟机无法访问。为了避免这样的矛盾, Java 虚拟机不允许子类方法缩小父类中被覆盖方法的访问权限。

 

补充:

private 方法  可以被隐藏  不可以被重写

static 方法   可以被隐藏  不可以被重写

final 方法    不可以被重写

这篇关于Java方法重写(overriding method)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/870858

相关文章

Linux换行符的使用方法详解

《Linux换行符的使用方法详解》本文介绍了Linux中常用的换行符LF及其在文件中的表示,展示了如何使用sed命令替换换行符,并列举了与换行符处理相关的Linux命令,通过代码讲解的非常详细,需要的... 目录简介检测文件中的换行符使用 cat -A 查看换行符使用 od -c 检查字符换行符格式转换将

Java编译生成多个.class文件的原理和作用

《Java编译生成多个.class文件的原理和作用》作为一名经验丰富的开发者,在Java项目中执行编译后,可能会发现一个.java源文件有时会产生多个.class文件,从技术实现层面详细剖析这一现象... 目录一、内部类机制与.class文件生成成员内部类(常规内部类)局部内部类(方法内部类)匿名内部类二、

SpringBoot实现数据库读写分离的3种方法小结

《SpringBoot实现数据库读写分离的3种方法小结》为了提高系统的读写性能和可用性,读写分离是一种经典的数据库架构模式,在SpringBoot应用中,有多种方式可以实现数据库读写分离,本文将介绍三... 目录一、数据库读写分离概述二、方案一:基于AbstractRoutingDataSource实现动态

Springboot @Autowired和@Resource的区别解析

《Springboot@Autowired和@Resource的区别解析》@Resource是JDK提供的注解,只是Spring在实现上提供了这个注解的功能支持,本文给大家介绍Springboot@... 目录【一】定义【1】@Autowired【2】@Resource【二】区别【1】包含的属性不同【2】@

springboot循环依赖问题案例代码及解决办法

《springboot循环依赖问题案例代码及解决办法》在SpringBoot中,如果两个或多个Bean之间存在循环依赖(即BeanA依赖BeanB,而BeanB又依赖BeanA),会导致Spring的... 目录1. 什么是循环依赖?2. 循环依赖的场景案例3. 解决循环依赖的常见方法方法 1:使用 @La

Java枚举类实现Key-Value映射的多种实现方式

《Java枚举类实现Key-Value映射的多种实现方式》在Java开发中,枚举(Enum)是一种特殊的类,本文将详细介绍Java枚举类实现key-value映射的多种方式,有需要的小伙伴可以根据需要... 目录前言一、基础实现方式1.1 为枚举添加属性和构造方法二、http://www.cppcns.co

Elasticsearch 在 Java 中的使用教程

《Elasticsearch在Java中的使用教程》Elasticsearch是一个分布式搜索和分析引擎,基于ApacheLucene构建,能够实现实时数据的存储、搜索、和分析,它广泛应用于全文... 目录1. Elasticsearch 简介2. 环境准备2.1 安装 Elasticsearch2.2 J

Java中的String.valueOf()和toString()方法区别小结

《Java中的String.valueOf()和toString()方法区别小结》字符串操作是开发者日常编程任务中不可或缺的一部分,转换为字符串是一种常见需求,其中最常见的就是String.value... 目录String.valueOf()方法方法定义方法实现使用示例使用场景toString()方法方法

Java中List的contains()方法的使用小结

《Java中List的contains()方法的使用小结》List的contains()方法用于检查列表中是否包含指定的元素,借助equals()方法进行判断,下面就来介绍Java中List的c... 目录详细展开1. 方法签名2. 工作原理3. 使用示例4. 注意事项总结结论:List 的 contain

Java实现文件图片的预览和下载功能

《Java实现文件图片的预览和下载功能》这篇文章主要为大家详细介绍了如何使用Java实现文件图片的预览和下载功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... Java实现文件(图片)的预览和下载 @ApiOperation("访问文件") @GetMapping("