1.Father f1 =new Son();// 這就叫 upcasting (向上轉(zhuǎn)型)// 現(xiàn)在 f1 引用指向一個(gè)Son對象
????Son s1=(Son) f1;// 這就叫 downcasting (向下轉(zhuǎn)型)// 現(xiàn)在f1 還是指向 Son對象
2.????Fatherf2=new Father();
????????Son s2=(Son)f2;// 出錯淫奔,子類引用不能指向父類對象
你或許會問北专,第1個(gè)例子中:Son s1 = (Son)f1;問為什么是正確的呢。
很簡單因?yàn)?f1 指向一個(gè)子類對象聋涨,F(xiàn)ather f1 = new Son();?子類 s1 引用當(dāng)然可以指向子類對象了税肪。
而 f2 被傳給了一個(gè) Father 對象溉躲,F(xiàn)ather f2 = new Father();?子類 s2 引用不能指向父類對象。
總結(jié):
1寸认、父類引用指向子類對象签财,而子類引用不能指向父類對象。
2偏塞、把子類對象直接賦給父類引用叫upcasting向上轉(zhuǎn)型唱蒸,向上轉(zhuǎn)型不用強(qiáng)制轉(zhuǎn)換嗎,如:
Fatherf1=newSon();
3灸叼、把指向子類對象的父類引用賦給子類引用叫向下轉(zhuǎn)型(downcasting)神汹,要強(qiáng)制轉(zhuǎn)換,如:
f1 就是一個(gè)指向子類對象的父類引用古今。把f1賦給子類引用 s1 即Son s1 = (Son)f1;
其中 f1 前面的(Son)必須加上屁魏,進(jìn)行強(qiáng)制轉(zhuǎn)換。