📅  最后修改于: 2023-12-03 15:32:02.105000             🧑  作者: Mango
Java是一种面向对象的编程语言,其允许在编译时定义一个变换,在运行时可以根据具体情况进行调用。这种能力就是所谓的多态性。
多态性是面向对象编程中的一个重要概念,它是一种能力,在相同的消息下,不同的对象能够以不同的方式进行响应。
Java中的多态性通过继承和方法重写实现。当一个子类继承了其父类的方法,而子类又对该方法进行了重写,此时当在父类中调用该方法时,实际上会调用子类中的方法,这就是多态性。
Java中的多态性在编译时和运行时都有体现。在编译时,如果使用的是父类引用来调用一个子类的方法,那么编译器就会根据父类引用的类型来判断要调用哪个方法。这种情况就是编译时多态性。
例如,下面的代码:
public class Animal {
public void speak() {
System.out.println("Animal speaks...");
}
}
public class Dog extends Animal {
@Override
public void speak() {
System.out.println("Dog barks...");
}
}
public class Test {
public static void main(String[] args) {
Animal animal = new Dog();
animal.speak();
}
}
在这个例子中,我们创建了一个Animal类和一个Dog类。Dog类继承了Animal类,并对其speak方法进行了重写。在Test类中,我们定义了一个Animal类型的变量animal,并将其赋值为一个Dog的实例。然后我们调用了animal的speak方法。在这个例子中,由于我们使用的是Animal类型的引用,因此编译器会先在Animal类中查找speak方法,然后发现该方法被重写了,在Dog类中也有一个speak方法,因此就调用了Dog类中的speak方法。输出结果为:
Dog barks...
这就是编译时多态性的体现。
Java中的编译时多态性是Java多态性的一种体现方式,在面向对象编程中起着重要的作用。它通过继承和方法重写实现,允许在编译时定义一个变换,在运行时可以根据具体情况进行调用。程序员在编写代码时,需要充分利用Java的多态性,以提高代码的重用性和可维护性。