简述java中重载和重写

原创admin 分类:热门问答 0

简述java中重载和重写
在Java编程语言中,重载(Overloading)和重写(Overriding)是实现多态性的两种不同方式。多态性是面向对象编程的核心概念之一,它允许我们以统一的方式处理不同类型的对象。本文将详细解释重载和重写的定义、目的、条件以及它们之间的区别,并提供使用场景和代码案例。

重载和重写的定义及目的

重载是指在同一个类中,可以定义多个同名的方法,只要它们的参数列表不同(即参数的类型、数量或顺序不同)。重载的目的是为了让方法名保持一致,同时能够根据传入不同的参数执行不同的操作。

重写则是指在子类中提供一个与父类中具有相同名称和参数列表的方法。重写的目的是允许子类根据需要改变从父类继承来的方法的行为。

重载与重写的区别

重载和重写在概念上有明显的区别:

  1. 作用范围:重载是编译时多态,发生在同一个类中;重写是运行时多态,发生在父子类中。
  2. 参数列表:重载要求方法必须具有不同的参数列表;而重写要求子类方法必须与父类方法具有相同的参数列表。
  3. 返回类型:重载的方法可以有不同的返回类型,而重写的方法返回类型必须与被重写的方法相同。
  4. 访问权限:重载的方法可以改变访问权限,而重写的方法不能比父类方法的访问权限更严格。

重载与重写的条件

  • 重载的条件

    1. 方法名相同。
    2. 参数列表不同(类型、数量或顺序)。
    3. 返回类型可以不同(Java不根据返回类型来区分重载)。
    4. 可以改变访问权限。
  • 重写的条件

    1. 方法名和参数列表必须与父类中的方法相同。
    2. 返回类型必须与被重写的方法相同。
    3. 访问权限不能比父类方法更严格。
    4. 如果父类方法抛出异常,子类重写的方法可以抛出相同的异常或其子异常,不能抛出更宽泛的异常类型。

核心类与方法

在Java中,任何类都可以通过合适的方法定义实现重载和重写。核心的概念在于方法的声明和调用机制。

使用场景

  • 重载的使用场景:当你需要根据不同的参数执行相似的功能时,可以使用重载。例如,一个计算面积的方法可能对不同形状有不同的实现。
  • 重写的使用场景:当你需要改变继承自父类的方法的行为时,可以使用重写。例如,不同类型的动物都有makeSound方法,但每种动物发出的声音不同。

代码案例

以下是重载和重写的基本代码案例。

重载的代码案例
public class Calculator {
    // 加法重载方法1:两个整数相加
    public int add(int a, int b) {
        return a + b;
    }

    // 加法重载方法2:三个整数相加
    public int add(int a, int b, int c) {
        return a + b + c;
    }

    // 加法重载方法3:两个浮点数相加
    public double add(double a, double b) {
        return a + b;
    }
}
重写的代码案例
class Animal {
    public void makeSound() {
        System.out.println("Some generic sound");
    }
}

class Dog extends Animal {
    @Override // 表示重写的方法
    public void makeSound() {
        System.out.println("Woof woof");
    }
}

// 使用场景
Animal myDog = new Dog();
myDog.makeSound(); // 输出:Woof woof

表格补充

以下是重载和重写的关键点对比表格:

特性 重载 重写
定义 同一个类中同名方法的不同实现 子类中提供与父类同名方法的不同实现
编译时期 编译时多态 运行时多态
参数列表 必须不同 必须相同
返回类型 可以不同 必须相同
访问权限 可以改变 不能比父类方法更严格
异常 可以抛出不同类型的异常 可以抛出相同的或更具体的异常
用例 根据不同的参数执行不同的操作 改变继承自父类的方法的行为

通过上述的详细讲解和代码案例,我们可以看到重载和重写在Java中是如何实现多态性的不同方式。重载允许我们通过不同的参数列表来定义相同的操作,而重写则允许子类改变继承自父类的行为。理解这些概念对于编写灵活且可扩展的Java程序至关重要。

猜你喜欢

领取相关Java架构师视频资料

网络安全学习平台视频资料