重载和重写的区别
重写:
重写(Override)是父类与子类之间多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Override)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。
重载:
重载(Overload)是一个类中多态性的一种表现。如果在一个类中定义了多个同名的方法,它们参数列表不同,则称为方法的重载(Overload)。
区别
重载(Overload):是一个类中多态性的一种表现,指同一个类中不同的函数使用相同的函数名,但是函数的参数个数或类型不同。
- 可以有不同的返回类型;
- 可以有不同的访问修饰符;
- 可以抛出不同的异常。调用的时候根据函数的参数来区别不同的函数。
重写(Override): 是父类与子类之间的多态性,是子类对父类函数的重新实现。函数名和参数与父类一样,子类与父类函数体内容不一样。
- 子类返回的类型必须与父类保持一致;
- 子类方法访问修饰符的限制一定要大于父类方法的访问修饰 (public>protected>default>private);
- 子类重写方法一定不能抛出新的检查异常或者比被父类方法申明更加宽泛的检查型异常。
示例
重载
package com.etime09;
public class Goods { //创建一个商品类
private String ID;
private int price;
private String name;
private String manufactureDate;
//实现构造函数的重载 参数个数或类型不同
public Goods() {
super();
// TODO Auto-generated constructor stub
}
public Goods(String iD) {
super();
ID = iD;
}
public Goods(String iD, int price) {
super();
ID = iD;
this.price = price;
}
public Goods(String iD, int price, String name) {
super();
ID = iD;
this.price = price;
this.name = name;
}
public Goods(String iD, int price, String name, String manufactureDate) {
super();
ID = iD;
this.price = price;
this.name = name;
this.manufactureDate = manufactureDate;
}
}
重写
package com.etime09;
public class Person { //创建一个父类Person
private String name;
private int age;
//父类中写一个eat()方法
public void eat() {
System.out.println("人都要吃饭");
}
}
---------------------------------------------
package com.etime09;
public class Student extends Person { //Student子类继承Person父类
@Override
//重写eat()方法 方法名,参数,返回类型相同;方法体内容不同
public void eat() {
System.out.println("学生喜欢吃肉");
}
}
总结
重写描述的是父类与子类的多态性的表现。重载描述的是一个类中多态性的表现。
重载: 发生在同一个类中,方法名必须相同,参数类型不同、个数不同、顺序不同,方法返回值和访问
修饰符可以不同,发生在编译时。
重写: 发生在父子类中,方法名、参数列表必须相同,返回值范围小于等于父类,抛出的异常范围小于
等于父类,访问修饰符范围大于等于父类;如果父类方法访问修饰符为private则子类就不能重写该方
法。
作者:BearBrick0
出处:https://www.cnblogs.com/bearbrick0/p/15870959.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」