java函数重载和函数重写

本文详细解析了Java中的函数重载(overload)和函数重写(override)的概念,介绍了它们的区别及应用场景。重点说明了重载在同一类中的实现方式,以及重写在继承关系中的使用规范。

java中,函数重载(overload)和 函数重写(override)是完全不同的两个概念,而这没有任何关系(除了名字有点像)

函数重载(overload):

1、针对同一个类中的一组函数来说的;

2、这组函数中,函数名称相同(一般情况下建议功能相似的函数才做函数重载);

3、形式参数不相同,包括参数的个数不同、参数的类型不同或参数个数和类型都不相同;

4、与函数的返回值类型没有关系

5、在调用函数时会根据参数的类型和个数自动去匹配,决定调用哪个函数。这种匹配是不精确的,会找最精确的,如果没有最精确的,会找次精确的,以此类推,而且这种匹配不需要人为去调用。

函数重写(override):函数重写又称为函数覆盖、方法重写、方法覆盖,其主要特性如下:

1、分别为与两个类中,这两个类有子父类关系(或接口与实现类);

2、声明的方法完全一样(函数名称、参数列表、返回值类型都完全一样);

3、函数的访问权限非private(子类的权限可以比父类的权限大或一样大,不能比父类的权限小);

4、有动态(在运行时刻)绑定(binding)(又称晚绑定)特性:父类的引用引用了子类的对象(或父接口引用了实现类的对象),这个引用去调用函数时,如果该函数构成了重写,那么调用子类的函数,其他情况下只能调用父类的函数(前提是父类必须存在这个函数)。


### Java函数重载函数重写的区别 #### 函数重载 (Method Overloading) 函数重载是指在一个类中定义多个方法,这些方法具有相同的名称但不同的参数列表。编译器会根据传递给方法的实际参数来决定调用哪一个具体的方法。 - **定义**: 同一作用域下允许多个同名方法存在,只要它们的参数列表不同即可[^1]。 - **特点**: - 参数的数量、类型或顺序至少有一个不同。 - 返回值类型不影响重载的选择。 - 编译期绑定:在编译阶段就决定了要调用的具体方法[^4]。 ```java class MathOperations { int add(int a, int b) { return a + b; } double add(double a, double b) { return a + b; } } public class Main { public static void main(String[] args) { MathOperations math = new MathOperations(); System.out.println(math.add(5, 3)); // 调用第一个add() System.out.println(math.add(2.5, 1.6)); // 调用第二个add() } } ``` --- #### 函数重写 (Method Overriding) 函数重写发生在子类中重新提供父类已有的方法的一种机制。这使得子类能够给出更具体的实现版本。 - **定义**: 子类可以重新定义从父类继承下来的方法,条件是方法签名(包括方法名参数列表)必须完全一致[^5]。 - **特点**: - 方法签名必须相同(包括返回值类型、访问修饰符等可能有特定约束)。 - 动态绑定:运行时才确定实际调用哪个方法。 - 需要在子类方法前加上 `@Override` 注解以表明这是对父类方法的覆盖。 ```java class Animal { void sound() { System.out.println("Animal makes a sound"); } } class Dog extends Animal { @Override void sound() { System.out.println("Dog barks"); } } public class Main { public static void main(String[] args) { Animal myAnimal = new Dog(); // 创建一个Dog类型的对象并赋值给Animal变量 myAnimal.sound(); // 输出 "Dog barks" } } ``` --- ### 主要区别总结 | 特性 | 函数重载 | 函数重写 | |-------------------|------------------------------------------|-----------------------------------------| | 发生位置 | 同一类内部 | 父类子类之间 | | 方法签名一致性 | 不需要一致,只需名字相同 | 必须完全一致 | | 绑定时间 | 编译时期 | 运行时期 | | 是否涉及多态 | 不涉及 | 涉及动态多态 | --- ### 使用场景分析 - **函数重载**适用于希望同一个操作能处理不同类型的数据的情况。例如加法运算既可以用于整数也可以用于浮点数。 - **函数重写**主要用于扩展或修改已有功能的行为而不改变接口设计,典型应用是在面向对象编程中的多态行为支持上。 ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值