当前位置: 代码迷 >> 综合 >> 重载(overload)和重写(override)
  详细解决方案

重载(overload)和重写(override)

热度:11   发布时间:2023-12-02 15:20:09.0

重载和重写

  • 重载
    • 使用重载的原因
    • 方法重载
    • 单数列表的不同
  • 重写
    • 方法重写的规则
    • 代码
  • 方法的重载和方法的重写的区别

重载

使用重载的原因

对于类似的多个方法,全部都是执行类似的操作,但是因为参数列表不一样,所以需要记住的名字太多。
使用方法重载可以很好的解决这个问题。
对于类似功能的多个方法,只要记住一个方法名即可,可以自动的根据参数列表中参数的个数的不同来适配。

方法重载

方法重载(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();}
}

方法的重载和方法的重写的区别

方法的重载,一个类可以有多个同名方法
方法的重写,子类可以重新写父类的方法

  相关解决方案