一、 对象不变;(改变的是主观认识)对象
二、 对于对象的调用只能限于编译时类型的方法,如调用运行时类型方法报错。get
在上面的例子中:Animal a=new Dog();对象a的编译时类型为Animal,运行时类型为dog。编译
注意:编译时类型必定要为运行时类型的父类(或者同类型)。变量
对于语句:Dog d=(Dog)a。将d强制声明为a类型,此时d为Dog(),此时d就能够调用运行时类型。注意:a和d指向同一对象。程序
三、 在程序的运行时,动态类型断定。运行时调用运行时类型,即它调用覆盖后的方法。方法
关系运算符:instanceofim
a instanceof Animal;(这个式子的结果是一个布尔表达式)static
a为对象变量,Animal是类名。类型转换
上面语句是断定a是否能够贴Animal标签。若是能够贴则返回true,不然返回false。标签
在上面的题目中: a instanceof Animal返回 True,
a instanceof Dog也返回 True,
instanceof用于断定是否将前面的对象变量赋值后边的类名。
Instanceof通常用于在强制类型转换以前断定变量是否能够强制转换。
若是Animal a=new Animal();
Dog d=Dog()a;
此时编译无误,但运行则会报错。
Animal a=new Dog()至关于下面语句的功能:
Animal a=getAnimal();
Public static Animal.getAnimal;
Return new Dog();