Java 重载和重写

技术博客 (143) 2023-12-27 09:01:01

目录

一、重写(覆写/重写/覆盖)

重写的规则

关于重写的注意事项

二、重载

重载规则:

重载(Overload)和重写(Override)的区别 


一、重写(覆写/重写/覆盖)

就是在子类中把父类本身有的方法重新写一遍。子类继承了父类原有的方法。

子类实现父类的同名方法
,
并且参数的类型和个数完全相同
,
这种情况称为
覆写
/
重写
/
覆盖.

重写的规则

  1. 方法同名
  2. 参数类型和个数相同
  3. 返回类型相同

关于重写的注意事项

  1.  普通方法可以重写, static 修饰的静态方法不能重写.
  2.  重写中子类的方法的访问权限不能低于父类的方法访问权限.
  3.  重写的方法返回值类型不一定和父类的方法相同(但是建议最好写成相同, 特殊情况除外).

 子类访问权限要大于父类

// Animal.java 
public class Animal { 
   public void eat(String food) { 
 ... 
 } 
} 
// Bird.java 
public class Bird extends Animal { 
 // 将子类的 eat 改成 private 
     private void eat(String food) { 
 ... 
 } 
} 
// 编译出错
Error:(8, 10) java: com.bit.Bird中的eat(java.lang.String)无法覆盖com.bit.Animal中的
eat(java.lang.String) 
 正在尝试分配更低的访问权限; 以前为public

 有了这个注解能帮我们进行一些合法性校验. 例如不小心将方法名字拼写错了 (比如写成 aet), 那么此时编译器就会发 现父类中没有 aet 方法, 就会编译报错, 提示无法构成重写.提高了写代码的效率.

我们推荐在代码中进行重写方法时
显式加上
@Override
注解
.
// Bird.java 
public class Bird extends Animal { 
 @Override 
 private void eat(String food) { 
 ... 
 } 
}

二、重载

同一个方法名字,提供不同版本的实现,称为方法重载   补充:构造方法也可以重载 

重载规则:

  1. 方法名相同
  2. 参数类型不同、参数个数不同甚至是参数顺序不同
  3. 返回值不作要求
  4. 必须在同一个类中
class Test{
    public static void main(String[] args) {
        int a=10;
        int b=20;
        int i=add(a,b);
        System.out.println(i);

        double a2=10.5;
        double b2=12.5;
        double i2=add(a2,b2);
        System.out.println(i2);
    }

    public static int add(int x,int y){
        return x+y;
    }

    public static double add(double x,double y){
        return x+y;
    }
}

//结果
30
23

 如代码中一样,通过传入的参数类型不同,确定调用哪种的重载方法。

重载(Overload)和重写(Override)的区别 

Java 重载和重写 (https://mushiming.com/) 技术博客 第1张

THE END

发表回复