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

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

1.什么是方法重载?

方法重载(Method Overloading)是指在同一个类中,可以定义多个方法具有相同的名称,但是参数列表不同。重载的方法可以有不同的参数类型、不同的参数个数,或者参数类型的顺序不同。方法重载的目的是提高代码的灵活性和可读性。

方法重载的规则:

  1. 方法名称相同: 重载的方法必须具有相同的名称。

  2. 参数列表不同: 重载的方法必须具有不同的参数列表。这可以通过参数类型、参数个数,或者参数类型的顺序来实现。

  3. 返回类型可以相同也可以不同: 方法重载可以具有相同的返回类型,也可以具有不同的返回类型。返回类型不是重载的决定性因素。

  4. 访问修饰符和异常类型不影响重载: 方法重载可以具有相同或不同的访问修饰符(如 publicprivateprotected)和可以抛出相同或不同的异常。

例子:

public class OverloadExample {
​
    // 方法重载:不同参数类型
    static int add(int a, int b) {
        return a + b;
    }
​
    // 方法重载:不同参数个数
    static double add(double a, double b, double c) {
        return a + b + c;
    }
​
    // 方法重载:不同参数类型和参数个数
    static String concatenate(String str1, String str2) {
        return str1 + str2;
    }
​
    static String concatenate(String str1, String str2, String str3) {
        return str1 + str2 + str3;
    }
​
    public static void main(String[] args) {
        System.out.println(add(2, 3));                // 输出 5
        System.out.println(add(1.5, 2.5, 3.5));       // 输出 7.5
        System.out.println(concatenate("Hello, ", "World!"));          // 输出 Hello, World!
        System.out.println(concatenate("Java", " is", " awesome!"));  // 输出 Java is awesome!
    }
}

在上面的例子中,add 方法和 concatenate 方法都展示了方法重载的不同形式。通过这样的方式,我们可以根据不同的参数情况使用相同的方法名称,提高代码的可读性和灵活性。


2. 什么是方法重写

方法重写(Method Overriding)是指子类中定义了一个与父类中已有的方法签名(包括方法名称、返回类型和参数列表)相同的方法,并且具有相同的访问修饰符。通过方法重写,子类可以提供自己的实现,覆盖父类中的相应方法。

方法重写是实现多态性(Polymorphism)的一种方式,允许在运行时动态选择调用哪个方法,具体调用哪个方法取决于对象的实际类型。

方法重写的规则:

  1. 方法名称、返回类型和参数列表必须相同: 在子类中重写的方法必须与父类中的方法具有相同的名称、返回类型和参数列表。

  2. 访问修饰符不能更严格: 子类中重写的方法的访问修饰符不能比父类中的方法更严格。例如,如果父类方法是 protected,子类方法可以是 protected 或者 public,但不能是 private 或默认(不加修饰符)。

  3. 抛出的异常不能更多,不能更限制: 子类中重写的方法可以不抛出异常,或者抛出与父类相同的异常,不能抛出更多或更限制的异常。

例子:

class Animal {
    void makeSound() {
        System.out.println("Some generic sound");
    }
}
​
class Dog extends Animal {
    // 方法重写
    @Override
    void makeSound() {
        System.out.println("Bark! Bark!");
    }
}
​
class Cat extends Animal {
    // 方法重写
    @Override
    void makeSound() {
        System.out.println("Meow");
    }
}
​
public class OverrideExample {
    public static void main(String[] args) {
        Animal animal1 = new Dog();
        Animal animal2 = new Cat();
​
        animal1.makeSound();  // 输出 Bark! Bark!
        animal2.makeSound();  // 输出 Meow
    }
}

在上面的例子中,DogCat 类继承自 Animal 类,它们分别重写了 makeSound 方法。在 main 方法中,通过多态性,使用父类的引用指向子类的对象,实现了动态调用相应子类的重写方法。这就是方法重写的一个典型应用场景。

3.两者区别

  1. 前者是使用在同一类下,方法用意相同但是传参不同

  2. 后者是主要用于继承,改写父类方法达到子类目的

相关推荐

  1. 方法重载方法区别

    2024-02-02 11:48:02       32 阅读
  2. 重载区别

    2024-02-02 11:48:02       40 阅读
  3. 方法,函数载,方法覆盖区别

    2024-02-02 11:48:02       43 阅读
  4. C++中重载区别

    2024-02-02 11:48:02       12 阅读
  5. 方法原则

    2024-02-02 11:48:02       36 阅读
  6. 方法重载

    2024-02-02 11:48:02       29 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-02 11:48:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-02 11:48:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-02 11:48:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-02 11:48:02       20 阅读

热门阅读

  1. TerserWebpackPlugin详解

    2024-02-02 11:48:02       31 阅读
  2. ES6 Proxy详解

    2024-02-02 11:48:02       36 阅读
  3. 在CentOS 7上安装MySQL 8.0

    2024-02-02 11:48:02       34 阅读
  4. Power BI 不重复计数函数

    2024-02-02 11:48:02       41 阅读
  5. C语言结构体赋值的四种方式

    2024-02-02 11:48:02       36 阅读
  6. 使用Eigen3计算旋转平移缩放矩阵

    2024-02-02 11:48:02       36 阅读
  7. 【Node系列】创建第一个服务器应用

    2024-02-02 11:48:02       35 阅读