向上轉型的作用

2021-09-26 01:54:06 字數 1364 閱讀 9729

上轉型物件不是父類建立的物件,而是子類物件的「簡化」狀態,它不關心子類新增的功能,只關心子類繼承和重寫的功能。

當乙個類有很多子類時,並且這些子類都重寫了父類中的某個方法。

當使用上轉型物件在呼叫這個方法時就可能具有多種形態。因為不同的子類在重寫父類的方法時可能產生不同的行為。也就是說,不同物件的上轉型物件呼叫同一方法可能產生不同的行為。

class car 

}public class benz extends car

public void price()

public static void main(string args)

}

當我們用car這個物件去呼叫benz類中price這個方法時,就會報錯: 

這就是因為我們此處進行的向上轉型,car這個物件雖然指向子類,但是子類由於進行了向上轉型,就失去了使用父類中所沒有的方法的「權利」,在此處就是不能呼叫price()這個方法。

那麼向上轉型到底有什麼用呢,到目前為止我們不僅看不到它的好處,反而發現使用了向上轉型後反而不能呼叫子類所特有的方法了。那麼向上轉型的作用到底是什麼呢?

class car 

public void speed()

}class bmw extends car

public void speed()

}public class benz extends car

public void speed()

public void price()

public static void main(string args)

public static void show(car car)

}

如果此處沒有向上轉型,要實現show每個子類的功能,那麼有幾個子類就要寫多少函式。

inte***ce a

b implements a

}c implements a

}

當你不確定要例項化的是b類還是c類,但又一定要返回乙個物件並且有aa方法,就可以用類似上面的做法,然後在需要物件時這樣使用即可獲得物件:   return a a1= new b();

總結 (還是前幾章裡提到的)

1.在呼叫方法的時候,用那個引用就呼叫那個引用的方法,然後觀察子類是否重寫,若重寫了就呼叫子類的,否則就呼叫父類的。

2.在物件當做引數遇到過載的時候,它會選擇與它最接近的型別引數的方法匹配。通俗點說就是,找與自己型別一致的,沒有找到則父類,以此類推。

3.注意子類中沒有被重寫的父類方法。

參考部落格:

向下轉型,向上轉型

package cn.dali.code24 向上轉型 父類引用指向子類物件 格式 父類名稱 物件名 new 子類名稱 向下轉型 當我們使用父類引用指向子類物件的時候,我們想把父類物件轉為子類物件時,需要向下轉型 向下轉型就是乙個還原動作。格式 子類名稱 物件名 子類名稱 父類物件 注意 乙個父類有...

向上轉型向下轉型

在引用資料型別中,只有有繼承關係的型別才能進行型別轉換 型別轉換只是轉換看待物件的引用的型別,物件本身沒有也不可能參與轉換 父類引用可以自動指向子類物件,但只能訪問和呼叫到來自於父類的屬性和行為 子類的引用不能指向父類或其它子類物件,就算強轉也會導致執行失敗並丟擲classcastexception...

inner class的向上轉型

inner class的向上轉型 當把乙個inner class物件向上轉型成為inte ce時,我們得到的只是乙個reference。inte cedestination inte cecontents classparcel3 protectedclasspdestinationimplemen...