本文为转载,原地址:http://blog.csdn.net/qq_38525526/article/details/74502898
子类继承父类,因此子类是一种特殊的父类, Java 允许将一个子类对象直接赋值给一个父类引用变量,
无须任何类型转换,这就是向上转型。既然子类对象可以直接赋值给父类引用变量,因此Java 引用变量有两个类型:一个是编译时的类型,一个是运行时的类型,所谓编译时的类型是指声明该变量时使用的类型,运行时的类型是由实际赋值给该变量的对象决定。
JAVA中引用变量只能调用其编译时类型所具有的方法,但运行时则会执行它运行时的类型所具有的方法。也就是说当一个子类对象直接赋值给一个父类引用变量时,只能调用父类所具有的方法,但实际运行时会运行子类的方法(因为父类的方法被覆盖了),这就是多态。
下面看一个例子