多态(Polymorphism)是面向对象编程的一个重要特征,指同一个类型的对象,在不同的情况下表现出不同的行为和属性。
多态有两种形式:静态多态和动态多态。静态多态是指在编译期就能确定方法调用的具体实现,包括方法重载和参数多态。动态多态是指在运行期根据对象的类型确定方法调用的具体实现,包括方法覆盖和对象多态。
方法覆盖(Method Overriding)是一种常见的动态多态形式,指子类重写父类的方法,使得相同的方法可以在不同的对象上表现出不同的行为。在Java中,方法覆盖的要求是方法名、参数类型和个数、返回类型必须与父类的方法一致,而方法体可以根据需要进行重写。例如:
csharpCopy code
class Animal {
public void makeSound() {
System.out.println("Animal makes sound");
}
}
class Cat extends Animal {
public void makeSound() {
System.out.println("Cat meows");
}
}
class Dog extends Animal {
public void makeSound() {
System.out.println("Dog barks");
}
}
在上面的例子中,Animal类是父类,Cat和Dog类是它的子类。它们都有一个名为makeSound的方法,但是具体的实现是不同的。当创建一个Animal对象、Cat对象或Dog对象时,调用它们的makeSound方法时,输出的结果也不同。
对象多态是指一个对象可以被赋予多种形态,即一个引用变量可以指向不同的实例对象,并根据实例对象的类型调用相应的方法。例如:
javaCopy code
Animal animal1 = new Animal();
Animal animal2 = new Cat();
Animal animal3 = new Dog();
在上面的例子中,animal1是一个Animal对象,animal2和animal3分别是一个Cat对象和一个Dog对象。它们都可以被赋给一个Animal类型的变量,这样就实现了对象多态。当调用animal1、animal2和animal3的makeSound方法时,会根据实例对象的类型调用相应的方法,实现不同的行为和结果。这就是对象多态。