java语言允许某个类型的引用变量引用子类的实例,而且可以对这个引用变量进行类型转换。把引用类型转换为子类类型,则称为向下转换;如果把引用类型转换为父类类型,则称为向上转型。
Animal animal=new Dog();
Dog dog=(Dog)animal;//向下转型,把Animal类型的转换为Dog类型,必须进行强制类型转换
Creature creature=animal;//向上转型,把Animal类型的转换为Creature类型,不需要强制类型转换
通过引用类型变量来访问所引用对象的属性和方法时,java虚拟机将采用以下绑定规则:
1、实例方法是与引用变量实际引用的对象的方法进行绑定的,属于动态绑定,因为实在运行时由JAVa虚拟机动态决定的。例如:animal.eat()将eat()方法与Dog类绑定。
2、静态方法与引用变量所声明的类型的方法绑定,属于静态绑定。因为实在编译阶段就已经做了决定。animal.staticEat()将staticEat()与Animal类绑定
3、成员变量(静态变量和实例变量)与引用变量所声明的类型的成员变量绑定,属于静态绑定,同上,animal.name与animal.staticName都与Animal类绑定。