Java中的重载和重写的区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中的重载和重写的区别相关的知识,希望对你有一定的参考价值。

重载就是同样的一个方法能够根据输入数据的不同,做出不同的处理 重写就是当子类继承自父类的相同方法,输入数据一样,但要做出有别于父类的响应时,你就要覆盖父类方法

重载

发生在同一个类中(或者父类和子类之间),方法名必须相同,参数类型不同、个数不同、顺序不同,与修饰符和返回值类型无关。 下面是《Java 核心技术》对重载这个概念的介绍: 综上:重载就是同一个类中多个同名方法根据不同的传参来执行不同的逻辑处理。 案例:比较两个数据是否相等。参数类型分别为两个byte 类型,两个short 类型,两个int 类型,两个long 类型,并在main 方法中进行测试。

public class Method_Demo6 
    public static void main(String[] args) 
        //定义不同数据类型的变量
        byte a = 10;
        byte b = 20;
        short c = 10;
        short d = 20;
        int e = 10;
        int f = 10;
        long g = 10;
        long h = 20;
        // 调用
        System.out.println(compare(a, b));
        System.out.println(compare(c, d));
        System.out.println(compare(e, f));
        System.out.println(compare(g, h));
    
    // 两个byte类型的
    public static boolean compare(byte a, byte b) 
        System.out.println("byte");
        return a == b;
    
    // 两个short类型的
    public static boolean compare(short a, short b) 
        System.out.println("short");
        return a == b;
    
    // 两个int类型的
    public static boolean compare(int a, int b) 
        System.out.println("int");
        return a == b;
    
    // 两个long类型的
    public static boolean compare(long a, long b) 
        System.out.println("long");
        return a == b;
    

重写

重写发生在运行期,是子类对父类的允许访问的方法的实现过程进行重新编写。

  1. 返回值类型、方法名、参数列表必须相同,抛出的异常范围小于等于父类,访问修饰符范围大于等于父类
  2. 如果父类方法访问修饰符为private/final/static则子类就不能重写该方法,但是被 static 修饰的方法能够被再次声明。
  3. 构造方法无法被重写

综上:重写就是子类对父类方法的重新改造,外部样子不能改变,内部逻辑可以改变

区别点 重载方法 重写方法
发生范围 同一个类 子类
参数列表 必须修改 一定不能修改
返回类型 可修改 子类方法返回值类型应比父类方法返回值类型更小或相等
异常 可修改 子类方法声明抛出的异常类应比父类方法声明抛出的异常类更小或相等;
访问修饰符 可修改 一定不能做更严格的限制(可以降低限制)
发生阶段 编译期 运行期

方法的重写要遵循 两同两小一大

  • “两同”即方法名相同、形参列表相同;
  • “两小”指的是子类方法返回值类型应比父类方法返回值类型更小或相等,子类方法声明抛出的异常类应比父类方法声明抛出的异常类更小或相等;
  • “一大”指的是子类方法的访问权限应比父类方法的访问权限更大或相等。
class Animal
   public void move()
      System.out.println("动物可以移动");
   

 
class Dog extends Animal
   public void move()
      System.out.println("狗可以跑和走");
   
   public void bark()
      System.out.println("狗可以吠叫");
   

 
public class TestDog
   public static void main(String args[])
      Animal a = new Animal(); // Animal 对象
      Animal b = new Dog(); // Dog 对象
 
      a.move();// 执行 Animal 类的方法
      b.move();//执行 Dog 类的方法
      b.bark();
   

以上是关于Java中的重载和重写的区别的主要内容,如果未能解决你的问题,请参考以下文章

请简述重载和重写的区别

java中重载有啥用

java中重载和重写的区别是啥?

重写和重载的三点区别

Java面试题:重载和重写的区别

重写(覆盖,Override)和重载(Overload)的区别