类的多态是面向对象编程的三大特性之一,与封装和继承并列。多态性允许我们将父对象设置为与其子对象相等的技术,让我们可以把一个子对象当作父对象对待。在Java中,多态主要体现在以下三个方面:
- 方法的重载(Overloading):在同一个类中,可以定义多个名称相同但参数列表不同的方法。
- 方法的覆盖(Overriding):在子类中定义一个与父类中同名、同参数列表的方法,以覆盖父类中的方法。
- 父类引用指向子类对象:这是多态性最典型的表现。父类类型的引用可以指向子类对象,并且调用子类对象的方法。
下面是一个简单的Java样例代码,展示了多态性的实现:
// 父类
class Animal {void makeSound() {System.out.println("The animal makes a sound");}
}// 子类1
class Dog extends Animal {@Overridevoid makeSound() {System.out.println("The dog barks");}
}// 子类2
class Cat extends Animal {@Overridevoid makeSound() {System.out.println("The cat meows");}
}// 主类
public class PolymorphismDemo {public static void main(String[] args) {Animal a1 = new Animal(); // 父类对象Animal a2 = new Dog(); // 子类Dog对象,但使用父类引用Animal a3 = new Cat(); // 子类Cat对象,但使用父类引用a1.makeSound(); // 输出:The animal makes a sounda2.makeSound(); // 输出:The dog barks,多态性体现a3.makeSound(); // 输出:The cat meows,多态性体现}
}
在上面的例子中,我们定义了一个Animal
父类和两个子类Dog
和Cat
。每个类都有一个makeSound
方法,用于模拟动物发出的声音。在main
方法中,我们创建了一个父类对象和两个子类对象,但都是使用父类Animal
的引用来引用它们。当我们调用makeSound
方法时,会根据实际对象的类型(多态性)来执行相应的方法。这就是多态性的一个典型应用。