前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >重载(Overloading)与重写(Overriding)的区别

重载(Overloading)与重写(Overriding)的区别

作者头像
繁依Fanyi
发布2024-10-22 15:57:58
发布2024-10-22 15:57:58
11400
代码可运行
举报
运行总次数:0
代码可运行

在 Java 编程中,重载和重写是两种实现多态的机制。尽管它们的名字相似,但它们在使用上有着明显的区别。

重写(Override)

重写,顾名思义,就是在子类中重新实现父类的方法。当一个子类继承了父类的特性时,可能会希望对父类中的某些方法进行自定义,这就是重写。重写的关键在于方法名、参数列表和返回类型必须完全相同,除了子类方法的返回类型可以是父类方法返回类型的子类。重写使得子类能够提供更具体的实现,从而增强了功能的灵活性。

在重写时,需要注意几点:

  1. 访问修饰符:子类中重写的方法访问修饰符必须大于或等于父类中的方法(例如,public > protected > default > private)。
  2. 异常处理:重写的方法不能抛出新的检查型异常,或者比被重写的方法声明的更宽泛的检查型异常。

以下是一个重写的示例代码:

代码语言:javascript
代码运行次数:0
复制
class Father {
    public void sayHello() {
        System.out.println("Hello from Father");
    }
}

class Son extends Father {
    @Override
    public void sayHello() {
        System.out.println("Hello from Son");
    }
}

public class Main {
    public static void main(String[] args) {
        Father father = new Father();
        father.sayHello(); // 输出: Hello from Father

        Father son = new Son();
        son.sayHello(); // 输出: Hello from Son
    }
}

在这个示例中,Son 类重写了 Father 类的 sayHello 方法。通过重写,子类可以改变父类的行为。

重载(Overload)

与重写不同,重载是指在同一个类中,可以定义多个同名的方法,这些方法的参数列表必须不同。重载的参数可以是不同的类型、数量或顺序。重载的主要目的是提高代码的可读性和灵活性。

重载的特性包括:

  1. 参数列表:重载方法必须有不同的参数列表,不能仅仅通过返回类型来区分。
  2. 返回类型:重载的方法可以具有相同或不同的返回类型,但不能仅以返回类型来判断重载。

下面是一个重载的示例代码:

代码语言:javascript
代码运行次数:0
复制
class Calculator {
    public int add(int a, int b) {
        return a + b;
    }

    public double add(double a, double b) {
        return a + b;
    }

    public int add(int a, int b, int c) {
        return a + b + c;
    }
}

public class Main {
    public static void main(String[] args) {
        Calculator calculator = new Calculator();
        System.out.println(calculator.add(1, 2)); // 输出: 3
        System.out.println(calculator.add(1.5, 2.5)); // 输出: 4.0
        System.out.println(calculator.add(1, 2, 3)); // 输出: 6
    }
}

在这个示例中,Calculator 类中的 add 方法被重载,以处理不同类型和数量的参数。

重载和重写是 Java 中实现多态的两种重要机制。重载是在同一类中定义多个同名但参数不同的方法,旨在提高灵活性;而重写则是在子类中重新实现父类的方法,使得子类可以定制父类的行为。理解这两者的区别有助于编写更高效、可维护的代码。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-10-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 重写(Override)
  • 重载(Overload)
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档