关于java方法的重载(Overloading),覆写(Override)以及final 方法的几点说明

C++ STL 算法实战:3步完成整数奇偶排序,告别手写冒泡 本文介绍如何利用C++ STL算法在3步内高效完成整数奇偶排序,替代传统冒泡排序方法。通过partition和sort等STL组件组合,代码量减少70%,执行效率显著提升,特别适合信息学奥赛和日常编程中的排序需求。 阅读详情

同步博文地址:http://august.b3log.org/articles/2012/07/16/1342420675028.html

昨天在一个群里面一个群友问道final 方法可不可以重载,我不假思索的说final 方法不能继承不能重载。后来晚上睡不着觉想想总觉得不对头,翻翻书一看自己简直就是胡说八道,才意识到这些基础概念的东西时间久了不深究很容易模糊变得模棱两可,尤其对于自己这种学东西不求甚解的人来说更是家常便饭。带着昨天血淋淋的教训,决定重头来过,今天这篇小笔记就算是一个开始吧!

        一.重载
        java的方法重载,就是在类中可以创建多个方法,它们具有相同的方法名,但具有不同的参数类型列表。java方法重载的典型应用就是java构造器的使用,方法重载也是java多态性的重要表现。

                    下面的例子援引《thinking in java》,同时示范了重载的构造器和重载的方法:

class Tree{
        int height;
        Tree(){
               System.out.println("Plantinga seeding");
               height = 0;
        }
        Tree(int initialHeight){
               height = initialHeight;
               System.out.println("CreatingNew Tree that is" + height + "feet tall");
        }
        void info(){
               System.out.println("Tree is" + height + "feet tall");
        }
        void info(String str){
               System.out.println(str+":Treeis " + height + "feet tall");
        }
}
public classOverloading {
        public static void main(String[] args) {
                       Tree tree = new Tree(5);
                       tree.info();
                       tree.info("overloadingmethod");
               //Overloaded Constructor
               new Tree();
        }
}

上面例子的输出结果为:

Creating New Tree that is5feet tall
Tree is 5 feet tall
overloading method:Tree is 5feet tall
Planting a seeding

关于重载的方法还有如下几点说明:

1,每个重载的方法都必须有一个独一无二的参数类型列表。

2,参数顺序的不同也足以区分两个方法。如下面的代码中的两个方法也是重载的方法

	static void f(String s , int i){
		
	}
	
	static void f(int i , String s){
		
	}
3,无论是在子类或者它的父类中对已有的方法进行定义,重载机制都可以正常工作。例如:

class Father{
	void  method(char c){
		
	}
	
	void method(float f){
		
	}
}
class Son extends Father{
	void method(double d){
		
	}
}

4,根据方法的返回值来区分重载方法是行不通的。原因很简单,比如现在有 void f(){ }和 int f(){return 1;}两个方法,当我们在另外一个地方需要调用其中的某个方法的时候,如果我们仅仅用 f(); 来调用方法,此时java就无法判断该调用哪个f()方法了。

二.覆写

覆写也叫重写。如果在子类中定义与父类具有相同名称和参数的方法,我们就说该方法被覆写。看下面的代码:

class Father{
	void  method(char c){//①
		
	}
	
	void method(float f){//②
		
	}
}
class Son extends Father{
	void method(double d){//③
		
	}
	void method(char c){//④
		
	}
}
我们需要区分的是,方法③属于重载的方法,而方法④属于重写的方法。

关于方法的重写归纳一下几点:

1,java中子类可以继承父类的方法而不需要重写,但如果子类不想照搬继承自父类的方法而想做一定的修改,这个时候就要用到方法的重写。

2,当子类的方法覆写了继承自父类的方法时,在子类这个层次从父类继承过来的方法将被隐藏,如需调用该方法,需使用super关键字,该关键字指向当前类的父类

3,很多时候我们想要重写一个方法时,往往因为该方法的参数类型列表没有与父类中的方法完全吻合而造成对该方法进行了重载而不是我们想要的重写。这个时候我们可以使用@Override注解。例如下面的代码:

class Father{
	void  method(char c){//①
		
	}
	
	void method(float f){//②
		
	}
}
class Son extends Father{
	@Override
	void method(double d){//③
		
	}
}
运行上面的代码,编译器会生成一条“method  does not override a mehtod from its superclass” 错误信息。因为我们希望方法③是个覆写方法的,而实际却写成了重载的方法。所以@Override注解可以防止你在不想重载时而意外的进行了重载。

三.final 方法

使用final方法的原因有两个。第一个原因是把方法锁定,以防止任何继承修改它的含义。这是出于设计的考虑:想要确保在继承中使方法行为保持不变,并且不会被覆盖。第二个原因是出于效率,因为在现在新版本的java中已经得到了解决,所以不再需要final方法来进行优化了。所以我们说,只有在想要明确禁止覆盖时,才将方法设置为final的。

对于final方法的讲述再看最后一个例子:

class Father{
	private final void method(){//①
		
	}
}
class Son extends Father{

	private final void method(){//②
		
	}
}
是不是会觉得上面的代码有问题?其实不然,上面的代码是合法的。并不是上面说的final 方法不能被覆写的理论是错的,而是我们要注意这里的方法其实是私有的(private),而私有的方法是不能被继承的。所以这里我们可以理解为 方法② 是在子类中定义的一个全新的方法,而非对父类方法的重写。

ps:算是第一次写技术博客,希望帮助自己更好的掌握知识的同时也能帮助到更多的人!

链接:这篇文章纯文字总结了重载,重写以及java的几个关键字的概念和用法。总结得很全面http://blog.youkuaiyun.com/wangzihu/article/details/7527923


深入解析SDC时钟约束:从create_clock到set_clock_groups的实战指南 本文深入解析SDC时钟约束,从create_clock到set_clock_groups的实战应用,帮助数字芯片设计工程师掌握时序约束的核心技巧。通过详细讲解时钟三要素(波形定义、不确定性和时钟关系)及实战案例,提升时钟约束的精准性和效率,避免常见设计陷阱。 阅读详情

相关推荐

用ESP32-S3+OV2640摄像头+ILI9488屏,DIY一个能联网的智能猫眼(附完整代码)

本文详细介绍了如何利用ESP32-S3微控制器搭配OV2640摄像头和ILI9488显示屏,DIY一个功能强大的智能猫眼系统。从硬件选型、电路设计到软件开发,提供了完整的解决方案和优化技巧,包括图像采集显示、WiFi远程访问及低功耗设计,适合智能家居爱好者动手实践。

weixin_30897233的博客 501

java注解中的重载是什么_JAVA中方法的重载与重写

JAVA中方法的重载与重写1. 重载简单来说就是方法名相同但是可以完成的功能不同,并且重载是发生在同一个类中。方法重载与下列因素相关:参数个数不同参数类型不同参数的多类型顺序不同方法重载与下列因素无关:与参数的名称无关(参数名字叫什么无所谓,只要是合法字符即可)与方法的返回值类型无关下面看一下具体的代码例子参数的个数不同(print的方法其实就是一个很好的方法重载例子)这几个方法中虽然方法名一样,...

weixin_32797081的博客 1512

Icarus Verilog和GTKwave使用简析

本简要介绍Icarus Verilog和GTKwave的使用,使用iverilog(Icarus Verilog)编译仿真verilog而使用GTKWave查看仿真数据波形下载安装 基本使用 iverilog使用 GTKWave使用 iverilog常用选项 使用库 注意

husipeng86的专栏 1万+

Java 重载 重写 注解 反射 多线程 锁 同步

不用为了对不同的参数类型或参数个数,而写多个函数。多个函数用同一个名字,但参数表,即参数的个数或(和)数据类型可以不同,调用的时候,虽然方法名字相同,但根据参数表可以自动调用对应的函数。2.参数必须不同:数量、类型、顺序不同(只要有一个不同,就是重载方法)在java中,如果有功能类似,可以使用相同的名字来定义不同功能方法;1.方法的名字必须相同,作用域必须相同。

个人学习的一些笔记 650

激光定位算法竞技场:hdl_localization与Cartographer/AMCL的横向技术解剖

本文深入对比了hdl_localization、Cartographer和AMCL三种激光定位算法的技术原理与性能表现。通过UKF-NDT融合、图优化和粒子滤波等核心技术,分析了各算法在结构化环境、动态环境和大尺度场景下的适应性。实验数据表明,Cartographer在全局一致性上表现最优,而AMCL在动态环境中更具鲁棒性。文章还提供了算法选型指南和参数调优技巧,为工程实践提供参考。

weixin_29062865的博客 365

LM Studio Bionic:本地AI智能体从部署到实战完整指南

AI智能体作为能够自主规划、执行多步任务的人工智能系统,其核心原理在于结合大语言模型的推理能力与工具调用机制。通过状态保持和任务分解算法,智能体实现了从单次问答到持续协作的技术跃迁。在工程实践中,这种架构显著降低了复杂任务自动化的门槛,特别适用于数据敏感场景和定制化需求。以Tesla V100等专业硬件为例,本地部署能充分发挥其大显存优势,支持更高精度的模型量化格式。在实际应用层面,智能体可无缝集成到代码审查、文档生成等开发工作流中,而LM Studio Bionic通过统一界面整合了模型服务、任务规划器等

weixin_29053695的博客 650

方法覆写、Final、多态

final修饰的引用类型变量, 变量值不能修改,但是变量指向的对象中的值,如果没有fianl修饰,是可以修改的。向下转型 , 由父类 到子类,类似于强制类型转换,但是 必须先发生向上转型之后,才能发生向下转型。this既然保存当前对象内存地址,那么this的类型 可以是当前类类型,可以是父类类型。Override : 方法覆写 , 子类覆写父类的方法 , 对父类的方法进行扩展。* 1 子类特有的,调用不了,因为多态的缺点就是丢失子类特有的属性。

weixin_60024966的博客 212

Isaac Sim 使用经验(配置要求,云服务器)

Google Colab及AutoDL都是在docker内运行,其中google colab并不支持docker指令,而依照AutoDL的相关文档,AutoDL并不直接提供docker指令。2. Google Colab/AutoDL 不支持图形化界面,图形渲染等任务,所以没有办法使用Omniverse Streaming进行直播,从而更好的对结果进行展示。对于第一点,或许存在直接手动复现镜像的可能,但是考虑到Isaac Sim/Isaac Lab由于比较新,可能不够稳定,因此还是按照官方文档进行部署。

weixin_44211433的博客 4587

方法的重载及注释

以上这些都是方法的重载,方法的重载主要就是方法名相同的情况下,看参数,其中,当参数的类型不同,或者顺序不同,或者个数不同都是可以构成方法的重载的,同时返回值类型和方法名与重载无关。在同一个类中,定义了多个同名的方法,但是每个方法具有不同的参数类型或者参数个数,这些同名的方法,就构成了重载关系。简单点来说,同一个类中,方法名相同,参数不同的方法,其中参数不同,包括个数不同,类型不同和顺序不同。方法重载的作用是当有多个相同的需求的时候,我们可以所传递参数的不同来实现相似的功能,eg求圆的面积和长方形的面积。..

weixin_54194900的博客 572

C#与发那科机器人通信实战:从SDK配置到机械臂控制

本文详细介绍了如何使用C#与发那科机器人进行通信,从SDK配置到机械臂控制的完整实战流程。内容包括环境准备、通信连接建立、机械臂运动控制、异常处理与状态监控,以及高级功能实战,帮助开发者快速掌握工业机器人编程技术。

weixin_42524276的博客 458

基于MicroPython的ESP32与微信小程序MQTT通信实战

本文详细介绍了基于MicroPython的ESP32与微信小程序通过MQTT协议实现远程控制的完整实战方案。项目利用巴法云作为免费MQTT服务器,提供了从设备端编程、小程序开发到通信调试的全流程指南,帮助开发者快速构建低成本、易上手的物联网应用,如智能开关、传感器监控等。

week9的博客 633

java什么时候用到重载_关于java方法的重载(Overloading),覆写(Override)以及final 方法的几点说明...

昨天在一个群里面一个群友问道final 方法可不可以重载,我不假思索的说final 方法不能继承不能重载。后来晚上睡不着觉想想总觉得不对头,翻翻书一看自己简直就是胡说八道,才意识到这些基础概念的东西时间久了不深究很容易模糊变得模棱两可,尤其对于自己这种学东西不求甚解的人来说更是家常便饭。带着昨天血淋淋的教训,决定重头来过,今天这篇小笔记就算是一个开始吧!一.重载java的方法重载,就是在类中可以创...

weixin_29304021的博客 395

从生成到检测:全面解析Deepfake技术的演进与对抗策略

本文全面解析了Deepfake技术的演进与对抗策略,从GAN生成技术到先进的检测手段,探讨了其在娱乐与安全领域的双重影响。文章详细介绍了Deepfake的核心原理、技术迭代关键节点以及最新的检测方法,揭示了AI生成与识别的激烈博弈。同时,展望了量子计算和生物特征认证在未来攻防战中的潜在应用。

jenkins8butler的博客 255

【Java教程】Day4-07 面向对象编程(OOP):方法覆写(Override)与多态的应用

在面向对象编程中,继承与多态是两大核心概念。在Java中,方法的覆写(Override)和方法的重载(Overload)经常被初学者混淆。本文将深入讲解方法覆写的基本概念及其与多态的关系,结合具体的代码示例,帮助你更好地理解和掌握这一重要技术。

max202011161630的博客 998

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

覆写、final、多态

Day10 覆写、final、多态 面向对象 1.1 覆写 1.1.1 是什么 覆写就是子类和父类有个一样(方法名,参数列表,返回值都一样)的成员方法 覆写特指成员方法,只有成员方法可以覆写 1.1.2 应用场景 什么时候需要覆写 : 如果父类方法不能满足子类需求的时候,需要对方法进行覆写 覆写条件: 1 必须是有继承关系 2 方法名,参数列表,返回值 必须相同 3 不能拥有更低访问权限 4 不能有更宽泛的异常 继承最基本的作用 : 代码重用 继承最重要的功能 : 方法覆写 1.1.3 覆写目的 覆

weixin_44482359的博客 709

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Java面试之方法的覆写与重载的区别

一、覆写 方法的覆写可以总结成容易记忆的口诀:“一大两小两同”。 (1)一大:子类的方法访问权限控制符只能相同或变大。 (2)两小:抛出异常和返回值只能变小,能够转型成父类对象。子类的返回值、抛出异常类型必须与父类的返回值、抛出异常类型存在继承关系。 (3)两同:方法名和参数必须完全相同。 覆写示例代码如下: class Father { protected Number doSomething(int a, Integer b, Object c) throws SQLException {

xiaoleilei666的博客 612

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

java方法覆写与方法重载小结

初学java,对方法覆写与方法重载存有疑惑,特此写下小结,帮助理解。 方法的重载(同类中) 同一个类中,方法名相同,参数不同就是重载,与返回值类型无关,实际上是多个方法,仅仅名字相同而已。 类似生活中,大厨炒菜,虽然名字一样,但是每次放的作料不同,做出的菜也不同 public class FunctionDemo { int price; public static void ma...

codemad的博客 341

Java面向对象--super、final、覆写、多态

1.是什么super : 在当前对象中,表示当前对象的父类官方说法是:super在子类中代表了父类型特征2.能做什么1 用于成员方法/构造方法中,区分子类和父类同名的属性2 用于子类构造方法中,调用父类的构造方法3.怎么用1 用于成员方法/构造方法中,区分子类和父类同名的属性2 用于子类构造方法中,调用父类的构造方法4. 注意1this()和 super( ) 不能同时出现,都必须写在构造方法第一行2this和super 都不能在静态上下文中使用。

weixin_55973811的博客 1743

final修饰的方法能否被继承?能否被重载?能否被重写?final修饰的类能否被继承?

首先我们先看下final在java中的作用 final在Java中可以用来修饰类、修饰方法和修饰变量 1. final修饰的类,为最终类,该类不能被继承。如String 类 2. final修饰的方法可以被继承和重载,但不能被重写 3. final修饰的变量不能被修改,是个常量 举例说明: public class Person { private S...

eather_liang的博客 3万+

Java中final关键字(final修饰的方法能否被重载?)

本来想试试final能不能被重载,后来想想还是都整理一下吧。 final修饰的类不能被继承验证 public class FinalTest { public static void main(String[] args){ Parent parent = new Son(); System.out.println(parent.getAge()); } static final class Parent { private in

再无此人的博客 1万+

方法覆写、Final、 多态

final修饰的引用类型变量, 变量值不能修改,但是变量指向的对象中的值,如果没有fianl修饰,是可以修改的。向下转型 , 由父类 到子类,类似于强制类型转换,但是 必须先发生向上转型之后,才能发生向下转型。* this既然保存当前对象内存地址,那么this的类型 可以是当前类类型,可以是父类类型。* 因为this能调用当前类中所有的属性,并没有丢失,所以this是Sup1 当前类类型。可以写,可以不写,只是一种提醒机制,防止我们写错代码,导致该方法并没有产生覆写。

weixin_65700312的博客 100

Java面向对象:覆写与重载

override和overload是非常容易混淆的概念。 一、override override是“覆写”,是子类实现接口,或者继承父类时,保持方法签名完全相同,实现不同的方法体,是垂直方向上行为的不同实现。 如果父类定义的方法达不到子类的期望,那么子类可以重新实现方法覆盖父类的实现。因为有些子类是延迟加载的,甚至是网络加载的,所以最终的实现需要在运行期判断,这就是所谓的动态绑定。动态绑定是...

HTZW的博客 372

覆写

1、子类继承父类后,覆写父类中方法(方法名、参数、返回值均相同),覆写的目的在于优化父类的功能。 2、在子类进行方法覆写之后,如想要继续调用父类中的方法,需使用“super.方法” 3、被覆写的方法不能够拥有比父类更为严格的访问权限。public>default(不写)>private 注: package com.demo; class Channel { priv...

qq_43711904的博客 228

Java覆写和多态

1、覆写 在继承关系中,子类如果定义了一个与父类方法签名完全相同的方法,被称为覆盖(Override)。 在Person类中定义了run()方法,在子类Student中,覆盖这个run()方法。 class Person { public void run() { System.out.println("Person.run"); } } class Student extends Person { /* ...

晓康的博客 748

java中重载与重写的区别

重写(Overriding) 重载(Overloading) 类的数量 父子类、接口与实现类 本类 方法名称 一致 一致 参数列表 一定不能修改 必须修...

菜鸟_zhengke的博客 4万+

Java 第13章 覆写

课时63:方法覆写 子类与父类一旦产生继承关系之后,实际上子类会继承父类中的全部定义,但是这里面也有可能出现不合适的场景,子类如果发现与父类中设计不足,并且需要保留父类中的方法或属性名称的情况下,就会发生覆写。 当子类定义了与父类方法名称相同、参数类型及个数完全相同的时候(跟父类一模一样),就称为方法的覆写。 package test; class Channel{ public void connect(){ System.out.println("【Cha...

u012820292的博客 196
上一篇: IT男几时而立(下)
下一篇: 百度跟csdn的过节
v-AUGUST-v
博客等级 码龄17年 117粉丝 27原创
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值