马士兵java架构师

您现在的位置是:java学习笔记 >

java学习笔记

java的重载和重写实例

2024-05-05 17:30:46java学习笔记 本文浏览次数:0 百度已收录

本 文 目 录

java的重载和重写实例
在Java编程语言中,重载(Overloading)和重写(Overriding)是两个核心概念,它们允许开发者以不同的方式实现多态性。多态性是面向对象编程的一个重要特性,它允许我们通过父类的引用来调用子类的方法,从而提高代码的灵活性和可扩展性。

定义与目的

重载是指在同一个类中定义多个同名的方法,但它们的参数列表(参数的类型和数量)必须不同。重载的目的是允许同一个行为通过不同的参数来实现,从而使得方法更加灵活。

重写则是指在子类中提供一个与父类中具有相同名称和参数列表的方法,从而实现对父类方法的替换。重写的目的是允许子类改变从父类继承来的方法的行为。

条件与区别

重载和重写都涉及到方法的名称和参数,但它们之间存在一些关键的区别:

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

核心类与方法

在Java中,任何类都可以通过重载和重写来实现多态性。例如,Object类是Java中所有类的根类,它包含了可以被重写的方法,如toString()equals()hashCode()

使用场景

重载通常用于提供一组行为相似但参数不同的方法。例如,一个计算几何形状面积的方法,可以针对不同的形状重载。

重写则用于扩展或修改继承自父类的方法。例如,一个动物类有一个makeSound()方法,不同的动物子类可以重写这个方法来发出特定的声音。

代码案例

重载案例
public class Calculator {
    // 加法重载
    public int add(int a, int b) {
        return a + b;
    }

    // 重载 - 加法,三个整数参数
    public int add(int a, int b, int c) {
        return a + b + c;
    }

    // 重载 - 加法,两个双精度浮点数参数
    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

表格补充

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

特性 重载 (Overloading) 重写 (Overriding)
定义 同一类中同名方法,不同参数列表 子类中同名同参数列表的方法替换父类方法
发生时间 编译时 运行时
参数列表 必须不同 必须相同
返回类型 可以不同 必须相同
访问修饰符 不限制 不能比父类方法更严格

通过上述的讲解和代码案例,我们可以看到重载和重写在Java编程中的重要性和应用方式。它们使得方法的使用更加灵活,并且允许子类以特定的方式实现或改变父类的行为。