Java方法重写(Override)与重载(Overload)的区别(超详细)
首页在我们要学习这个知识点之前,应该要先了解什么是多态?在最初学习java的时候,人们都知道,java这种面向对象的语言,一共有三大特征,分别是:封装、继承、多态。
多态是同一个行为具有多个不同表现形式或形态的能力。举个例子,比如大多数动物(抽象类)会叫,但是狗(实现类)就是汪汪汪,猫(实现类)就是喵喵喵。
多态实现的必要条件
- 子类必须继承父类
- 必须有重写
- 父类引用指向子类对象
多态的实现途径多态的实现途径有三种:重写、重载、接口实现,虽然它们的实现方式不一样,但是核心都是:同一行为的不同表现形式。
在大概了解什么是多态后,接下来就看看Java方法重写(Override)与重载(Overload)
一、重写(Override)
- 父类与子类之间多态的关系,对父类的函数进行重新定义。如果在子类中定义的某些方法和父类有相同的名称和参数,那么这就是方法被重写了。
但是有时候子类并不想一动不动的继承父类的方法,想做一些修改,这就需要采用方法的重写。
方法的重写体现在子父类当中,最典型的是子类重写父类中的方法.
重写代码如下:
public class Father {
public void walk(){
System.out.println("我是父亲");
}}public class Son extends Father {
@Override//方法重写
public void walk() {
System.out.println("我是儿子");
}
}
- 方法重写又称为方法覆盖。
如果子类的方法与父类中的某一个方法具有相同的方法名、返回类型和参数列表,则新方法将覆盖原有方法。 - 子类方法的访问修饰权限不能小于父类的。
二、重载(Overload)
- 多个同名的方法同时存在,具有不同的参数/类型。重载是一个类中多态性的一种表现
- 重载的时候,方法名必须一样,但参数类型和个数不一样,返回值类型可以一样也可以不一样。我们不能以返回值类型作为重载方法的区分标准!!!如果参数类型和个数一样,返回值类型不同是不算重载的.
这种写法会直接报错.因为在调用方法的时候,我们还不知道方法的返回值类型,所以编译器无法区分你调用的是哪个方法。 - 在调用方法时,通过传递给它们不同的参数个数和参数类型来决定去使用哪个对应的方法,这就是多态性。
重载代码如下:
public void eat(){
System.out.println("我是干饭人" );
}//public int eat(){会报错
//return 4;
//}
//报错原因:参数类型和个数一样,返回值类型不同是不算重载的
//因为在调用方法的时候,我们还不知道方法的返回值类型,所以编译器无法区分你调用的是哪个方法。public void eat(String name){
System.out.println("我是干饭人:"+name );
}public void eat(String name,int age){
System.out.println("我是干饭人:"+name+"我今年"+age );
}
这里要注意:
重写Override是父类与子类之间多态的关系,而重载Overload是一个类中多态性的表现。
三、总结方法重载Overload:
1、同一个类中
2、方法名相同,参数列表不同(参数顺序、个数、类型)
3、方法返回值、访问修饰符任意
4、与方法的参数名无关
方法重写Override:
1、有继承关系的子类中
2、方法名相同,参数列表相同(参数顺序、个数、类型),方法返回值相同
【java基础|Java方法重写与重载的区别】3、访问修饰符,访问范围需要大于等于父类的访问范围
4、与方法的参数名无关
推荐阅读
- java基础|String、StirngBuffer、StringBuilder的区别《区别|CSDN创作打卡》
- Java程序设计|Java——集合
- 1|java基础--5HashMap专题
- #|蓝桥杯31天冲刺打卡题解(Day6)
- 蓝桥杯|蓝桥杯AcWing学习笔记 6-1双指针的学习(附相关蓝桥真题(日志统计、完全二叉树的权值))
- #|蓝桥杯31天冲刺打卡题解(Day2)
- #|蓝桥杯31天冲刺打卡题解(Day1)
- angularjs|安装angularjs及idea导入angularjs项目
- 鸿蒙|鸿蒙开发工具DevEco Studio如何切换黑色界面