java中实现多态的机制靠的是父类或接口能够指向子类或实现类。程序运行时,JVM会根据内存中实际的对象调用方法。
在Java中,多态是面向对象编程的三大特性之一,它允许你使用一个接口来引用不同类型的对象,并且可以调用该接口的方法。Java中的多态主要通过以下机制实现:
继承:在Java中,子类可以继承父类的属性和方法。当子类重写父类的方法时,就可以通过父类的引用变量来引用子类的对象,从而实现了多态。
接口:Java中的接口是一种抽象类型,它定义了一组方法,但没有实现这些方法。一个类可以实现一个或多个接口,这样就可以使用这些接口的方法。通过接口实现的多态,可以在不同的类中实现相同的方法,从而使得这些类能够以相同的方式被使用。
下面是一个简单的Java多态例子:
java
// 父类
class Animal {
public void makeSound() {
System.out.println("Animal makes a sound");
}
}
// 子类1
class Dog extends Animal {
@Override
public void makeSound() {
System.out.println("Dog barks");
}
}
// 子类2
class Cat extends Animal {
@Override
public void makeSound() {
System.out.println("Cat meows");
}
}
// 测试类
public class PolymorphismExample {
public static void main(String[] args) {
Animal animal1 = new Dog(); // 创建Dog对象,但通过Animal引用变量引用它
Animal animal2 = new Cat(); // 创建Cat对象,但通过Animal引用变量引用它
animal1.makeSound(); // 调用Dog的makeSound方法,输出 "Dog barks"
animal2.makeSound(); // 调用Cat的makeSound方法,输出 "Cat meows"
}
}
在这个例子中,我们定义了一个Animal类作为父类,以及两个子类Dog和Cat。这两个子类都重写了父类的makeSound()方法。在PolymorphismExample类中,我们创建了一个Dog对象和一个Cat对象,但是通过Animal类型的引用变量来引用它们。当我们调用这些引用变量的makeSound()方法时,实际上调用的是子类的makeSound()方法,这就是多态的实现。