重载和重写
- 重载
-
- 使用重载的原因
- 方法重载
- 单数列表的不同
- 重写
-
- 方法重写的规则
- 代码
- 方法的重载和方法的重写的区别
重载
使用重载的原因
对于类似的多个方法,全部都是执行类似的操作,但是因为参数列表不一样,所以需要记住的名字太多。
使用方法重载可以很好的解决这个问题。
对于类似功能的多个方法,只要记住一个方法名即可,可以自动的根据参数列表中参数的个数的不同来适配。
方法重载
方法重载(Overload):方法名相同,但是参数列表不同
单数列表的不同
与返回值类型无关
与参数的名称无关
注意,不能根据返回值的类型的不同来重载
也不能由参数的名称来重载
- 参数的个数不同
public static int sum(int a, int b){
return a + b;
}public static int sum(int a, int b, int c){
return a + b + c;
}
- 参数的类型不同
public static int sum(int a, int b){
return a + b;
}public static double sum(double a, double b){
return a + b;
}
- 参数的多类型不同
public static double sum(double a, int b){
//谁的数据范围大,结果返回的就是谁return a + b;
}publid static sum(int a, double b){
return a + b;
}
重写
子类根据需求对从父类继承的方法进行重新编写,也称方法的重置、覆盖
重写时,可以用super.
方法的方式来保留父类的方法
构造方法不能被重写
方法重写的规则
只重写编写方法体的代码
- 方法名相同
- 参数列表相同
- 返回值类型相同或者是其子类
- 访问权限不能严于父类
- 父类的静态方法不能被子类覆盖为非静态方法,父类的非静态方法不能被子类覆盖为静态方法
- 子类可以定义与父类同名的静态方法,以便在子类中隐藏父类的静态方法
- 父类的私有方法不能被子类覆盖
- 不能抛出比父类方法更多的异常
代码
package day1103;/** 方法重写(覆盖)* 返回值类型,子类要小于父类*/
public class TestOverride {
public static void main(String[] args) {
Horse h = new Horse();h.run();}
}class Vehicle {
public void run() {
System.out.println("奔跑吧,Vehicle");}public void stop() {
System.out.println("Stop, Vehicle");}//返回乘客public Person whoIsPsg() {
return new Person();}
}class Horse extends Vehicle {
public void run() {
System.out.println("白龙马,蹄朝西。。。");}public Student whoIsPsg(){
return new Student();}
}
方法的重载和方法的重写的区别
方法的重载,一个类可以有多个同名方法
方法的重写,子类可以重新写父类的方法