多态是指对象能够有多种形态。在 OOP 中最常用的多态性发生在当父类引用指向子类对象时。

任何能够通过一个以上的 IS-A 测试的 Java 对象被认为是多态的。在 Java 中所有对象都是多态的,因为任何一个对象都会有一个他们自己类型的和 Object 类的 IS-A 关系。

重要的是知道,通过引用变量是唯一可以用来访问一个对象的方法。引用变量可以只有一个类型。引用变量一旦被声明是不能被改变的。

引用变量能够重新分配到其他提供的没有被声明为 final 的对象。引用变量的类型将决定它可以调用的对象的方法。

一个引用变量能够引用任何一个对象的声明类型或任何声明类型的子类型。一个引用变量可以声明为一个类或接口类型。

示例

让我们看下面的例子:

public interface Vegetarian{}
public class Animal{}
public class Deer extends Animal implements Vegetarian{}

现在 Deer 类是多态的,因为他有多个继承机制。针对上面的例子有以下说法:

• Deer 就是 Animal

• Deer 就是 Vegetarian

• Deer 就是 Deer

• Deer 就是 Object

当我们提供引用变量来引用 Deer 对象,下面的声明是合法的:

Deer d = new Deer();
Animal a = d;
Vegetarian v = d;
Object o = d;

所有的引用变量 d, a, v, o 引用堆内存中同一个对象 Deer。