多态性是面向对象编程中的一个核心概念,它允许我们使用一个接口来引用多个类,实现不同的行为。在 Java 中,多态性主要体现在方法重载和方法重写两个方面。

方法重载

方法重载是指在同一个类中,允许存在多个名称相同,但参数列表不同的方法。Java 编译器会根据参数列表来决定调用哪个方法。

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

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

在上面的例子中,Calculator 类中定义了两个 add 方法,一个接受两个 int 类型的参数,另一个接受两个 double 类型的参数。这样,我们可以根据需要调用不同的 add 方法。

方法重写

方法重写是指在子类中,可以使用与父类相同的方法名和参数列表来重写父类的方法。子类重写的方法必须与父类的方法有相同的返回类型,且不能抛出比父类更多的异常。

public class Animal {
    public void makeSound() {
        System.out.println("Animal makes a sound");
    }
}

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

在上面的例子中,Dog 类继承自 Animal 类,并重写了 makeSound 方法。当调用 dog.makeSound() 时,会输出 "Dog barks",而不是 "Animal makes a sound"。

多态的应用

多态性在 Java 中有着广泛的应用,例如:

  • 向上转型:当子类对象被引用为父类对象时,只能调用父类中定义的方法和属性。
  • 向下转型:当需要调用子类特有的方法或属性时,需要先将父类对象强制转换为子类对象。
Animal animal = new Dog();
animal.makeSound(); // 输出 "Dog barks"

Dog dog = (Dog) animal;
dog.fetch(); // 假设 Dog 类有一个 fetch 方法

扩展阅读

想要了解更多关于 Java 多态性的内容,可以阅读以下文章: