我們知道老虎是動(dòng)物,若動(dòng)物類是老虎類的父類,需要注意的是,當(dāng)說老虎是動(dòng)物時(shí),老虎將失掉老虎獨(dú)有的屬性和功能。從人的思維方式上看,說“老虎是動(dòng)物”屬于上溯思維方式,這種思維方式和Java語言中的上轉(zhuǎn)型對(duì)象類似。
假設(shè)Animal類是Tiger類的父類,當(dāng)用子類創(chuàng)建一個(gè)對(duì)象,并把這個(gè)對(duì)象的引用放到父類的對(duì)象中時(shí),例如:
Animal a; a = new Tiger();
或者
Animal a; Tiger b=new Tiger(); a = b;
這時(shí)稱對(duì)象a是對(duì)象b的上轉(zhuǎn)型對(duì)象,就好比說“老虎是動(dòng)物”。 對(duì)象的上轉(zhuǎn)型對(duì)象的實(shí)體是子類負(fù)責(zé)創(chuàng)建的,但上轉(zhuǎn)型對(duì)象會(huì)失去原對(duì)象的一些屬性和功能。
上轉(zhuǎn)型對(duì)象具有如下特點(diǎn):
(1)上轉(zhuǎn)型對(duì)象不能操作子類新增的成員變量,不能調(diào)用子類新增的方法。
(2)上轉(zhuǎn)型對(duì)象可以訪問子類繼承或隱藏的成員變量,也可以調(diào)用子類繼承的方法或子類重寫的實(shí)例方法。上轉(zhuǎn)型對(duì)象操作子類繼承的方法或子類重寫的實(shí)例方法,其作用等價(jià)于子類對(duì)象去調(diào)用這些方法。因此,如果子類重寫了父類的某個(gè)實(shí)例方法后,當(dāng)對(duì)象的上轉(zhuǎn)型對(duì)象調(diào)用這個(gè)實(shí)例方法時(shí)一定是調(diào)用了子類重寫的實(shí)例方法。
注意:
(1)不要將父類創(chuàng)建的對(duì)象和子類對(duì)象的上轉(zhuǎn)型對(duì)象混淆。
(2)可以將對(duì)象的上轉(zhuǎn)型對(duì)象再強(qiáng)制轉(zhuǎn)換到一個(gè)子類對(duì)象,這時(shí),該子類對(duì)象又具備了子類所有的屬性和功能。
(3)不可以將父類創(chuàng)建的對(duì)象的引用賦值給子類聲明的對(duì)象,例如:不能說“人是中國人”。
C語言網(wǎng)提供由在職研發(fā)工程師或ACM藍(lán)橋杯競(jìng)賽優(yōu)秀選手錄制的視頻教程,并配有習(xí)題和答疑,點(diǎn)擊了解:
一點(diǎn)編程也不會(huì)寫的:零基礎(chǔ)C語言學(xué)練課程
解決困擾你多年的C語言疑難雜癥特性的C語言進(jìn)階課程
從零到寫出一個(gè)爬蟲的Python編程課程
只會(huì)語法寫不出代碼?手把手帶你寫100個(gè)編程真題的編程百練課程
信息學(xué)奧賽或C++選手的 必學(xué)C++課程
藍(lán)橋杯ACM、信息學(xué)奧賽的必學(xué)課程:算法競(jìng)賽課入門課程
手把手講解近五年真題的藍(lán)橋杯輔導(dǎo)課程