我們知道老虎是動物,若動物類是老虎類的父類,需要注意的是,當說老虎是動物時,老虎將失去老虎獨有的屬性和功能。從人類的思考方式來看,說「老虎是動物」屬於上溯思維方式,這種思考方式和Java語言中的上轉型對象類似。
假設Animal類別是Tiger類別的父類,當用子類別建立一個對象,並且把這個物件的參考放到父類別的物件中時,例如:
Animala;a=newTiger();
或者
Animala;Tigerb=newTiger();a=b;
這時稱對象a是對象b的上轉型對象,就好比說「老虎是動物」。 物件的上轉型物件的實體是子類別負責創建的,但上轉型物件會失去原始物件的一些屬性和功能。
上轉型對象具有以下特點:
(1)上轉型物件不能操作子類別新增的成員變量,不能呼叫子類別新增的方法。
(2)上轉型物件可以存取子類別繼承或隱藏的成員變量,也可以呼叫子類別繼承的方法或子類別重寫的實例方法。上轉型物件操作子類別繼承的方法或子類別重寫的實例方法,其作用等價於子類別物件去呼叫這些方法。因此,如果子類別重寫了父類別的某個實例方法後,當物件的上轉型物件呼叫這個實例方法時一定是呼叫了子類別重寫的實例方法。
注意:
(1)不要將父類別所建立的物件和子類別物件的上轉型物件混淆。
(2)可以將對象的上轉型對象再強制轉換到一個子類對象,這時,該子類對象又具備了子類所有的屬性和功能。
(3)不可以將父類別創建的對象的引用賦值給子類別聲明的對象,例如:不能說「人是中國人」。