一、 對象不變;(改變的是主觀認識)對象
二、 對於對象的調用只能限於編譯時類型的方法,如調用運行時類型方法報錯。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();