多态性是面向对象编程中的一个核心概念,它允许我们使用一个接口来引用多个类,实现不同的行为。在 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 多态性的内容,可以阅读以下文章: