重写以及重载有什么区别能简单说说嘛
前述
这是一道非常基础的面试题,我们在回答的过程中一定要逐一横向比较。
从方法的 修饰符,返回值,方法名,含义,参数等方面进行逐一分析来比较不同。
话不多话,看下面的图文。
1. 重载实例
public class Test001 {
public void run(int number) {
System.out.println("run(int number)");
}
public void run(String str) {
System.out.println("run(String str)");
}
public int run(int number, String str) {
System.out.println("run(int number, String str)");
return 0;
}
private String run(String str, int number) {
System.out.println("run(String str, int number)");
return "";
}
}
上述的实例实现了方法重载,方法重载的特征是:同一个类中,方法签名相同,参数列表不同
参数列表代之指:类型不同
, 个数不同
, 顺序不同
。
所以重载只跟函数签名 以及参数列表有关系,跟其他无关。
2. 重写实例
父类代码
public class Parent extends SuperP{
public Parent run(int number) {
System.out.println("run(int number)");
return new Parent();
}
}
子类代码
public class Child extends Parent {
public void eat(String str) {
System.out.println("eat(String str)");
}
@Override
public Parent run(int number) {
return new Child();
}
}
上述示例中 子类重写了父类的run
方法。
既然是重写的话,那么函数签名以及参数列表是必须相同的。
但是针对于返回值,父类的返回值一定是大于等于子类的,这个符合了多态的特征。可以理解为Person p = new Child()
这里的大于呢,其实就是继承关系,就是父类的返回值一定是子类返回值的本身或是父类才行。
3. 应用实例
- 重载
重载的意义在于 当方法功能相似,但是参数不同,这个时候我们就可以使用重载
- 重写
重写一定发生在继承关系中,也就是子类可以重写父类的方法。当父类的方法不满足于子类的时候,子类就可以重写。