ITPub博客

首页 > 应用开发 > Python > Java 如何实现方法重载和重写的区别?

Java 如何实现方法重载和重写的区别?

原创 Python 作者:mingtian66 时间:2024-10-29 13:21:01 0 删除 编辑

在 Java 中,方法重载(Overloading) 和 方法重写(Overriding) 是实现多态性(Polymorphism)的两种不同方式,分别适用于编译时多态性和运行时多态性。它们的主要区别如下:
方法重载(Overloading)

方法重载是 同一个类中 方法名相同,但参数列表不同的情况。通过方法重载,可以根据不同的参数调用相应的同名方法。方法重载发生在编译时。
特点:

    方法名相同,但参数类型、参数个数或参数顺序不同。
    返回类型可以不同,但返回类型不同不足以构成重载,必须有不同的参数列表。
    方法重载在编译时进行,即属于编译时多态性。

示例:

java

class MathUtils {
    // 重载方法:参数不同
    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;
    }
}

在这个例子中,add 方法被重载了三次,因为它们的参数列表不同。Java 编译器在编译时根据传入的参数类型和数量来选择调用哪一个 add 方法。
方法重写(Overriding)

方法重写是 子类中 对父类方法的重新实现。子类继承父类的一个方法,可以根据自己的需求提供不同的实现。方法重写发生在运行时。
特点:

    方法签名(包括方法名和参数列表)必须与父类的完全相同。
    返回类型应与父类方法的返回类型相同或为其子类型(协变返回类型)。
    重写方法不能比被重写的方法有更严格的访问权限,例如,如果父类方法是 public,则子类方法也必须是 public。
    方法重写在运行时进行,即属于运行时多态性。

示例:

java

class Animal {
    public void makeSound() {
        System.out.println("Some generic animal sound");
    }
}

class Dog extends Animal {
    @Override
    public void makeSound() {
        System.out.println("Bark");
    }
}

在这个例子中,Dog 类重写了 Animal 类的 makeSound 方法。当我们调用 makeSound 方法时,实际运行的是 Dog 类的实现,这就是运行时多态性。
方法重载与重写的区别
特性    方法重载(Overloading)    方法重写(Overriding)
发生位置    同一类中    子类中对父类方法重新定义
参数列表    必须不同    必须相同
返回类型    可以相同或不同    必须相同或为父类返回类型的子类型
访问修饰符    无限制    不能比父类方法更严格
静态性(Static)    可重载静态方法    不能重写静态方法
多态性    编译时多态性(静态绑定)    运行时多态性(动态绑定)
方法重载和重写的关键点

    重载是在编译时确定方法调用的,根据参数列表的不同进行区分。
    重写是在运行时确定方法调用的,根据实际对象的类型决定调用父类或子类的方法。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70040412/viewspace-3043150/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2024-08-07

  • 博文量
    589
  • 访问量
    603013