什麼是 Java 中的向上轉換和向下轉換? 簡單說明

已發表: 2021-01-22

目錄

Java中的向上轉換和向下轉換

Java 中的類型轉換是指涉及將一種數據類型轉換為另一種數據類型的過程。 這可以自動和手動完成。 雖然程序員必須自己進行手動轉換,但編譯器用於自動過程。 向下轉換和向上轉換本質上是兩種類型的對像類型轉換。

子對象和父對像是兩種不同類型的對象。 現在,有兩種方法可以幫助初始化對象,隨後還可以繼承子類和父類所具有的屬性。 這些方式包括:

  • Child c = new Child():訪問子類和父類下的所有成員
  • Parent p = new Child():只訪問父類成員,以及子類中已經被覆蓋的方法

從本質上講,Parent 到 Child 的類型轉換稱為 Upcasting,而 Child 到 Parent 的類型轉換稱為 Downcasting。

類型轉換系統用於確保變量是否由函數準確處理。 雖然隱式向下轉換是不可能的,但可以顯式和隱式地執行向上轉換。

向下轉換和向上轉換都是 Java 的重要元素,使人們能夠使用簡單的語法開發複雜的程序。 它們還具有一些很大的優勢,例如將不同的對象組合在一起或多態性。

從世界頂級大學學習在線軟件開發課程獲得行政 PG 課程、高級證書課程或碩士課程,以加快您的職業生涯。

向上轉型

在向上轉換中,子對像是對父類對象的類型轉換。 通過使用這個過程,人們可以輕鬆地訪問父類到子類的區別方法和變量。 在該過程中只需要訪問子類的某些特定方法和變量,例如被覆蓋的方法。 在許多情況下,向上轉換也稱為擴展和泛化。 向上轉型可以隱式進行,並為人們提供訪問父類成員的靈活性。

以下示例有助於更好地理解該過程。

示例:有一個動物類別,其中包含不同類別的動物,魚就是其中之一。 現在,假設動物類由魚類擴展,將有兩種繼承方式。 繼承是面向對象編程或 OOP 的關鍵方面之一,它允許一個類繼承另一個類的特性。 這意味著派生類是基類的超集。 這裡可能有比基類更多的方法。 在向上轉換期間,類接口唯一可能發生的事情是它最終可能會丟失方法而不是獲得它們。 因此,編譯器無需任何類型的特殊符號或顯式轉換即可啟用向上轉換。

組合與繼承

當涉及到面向對象編程時,很有可能最終通過將方法和數據打包到一個類中來完成創建和使用,然後使用該類中存在的對象。 人們甚至可以使用某些現有的類來開發具有組合的新類。 繼承相對很少使用。 在學習 OPP 時,儘管繼承確實得到了很多關注,但重要的是開發人員知道它的正確用法,並且不要試圖在任何可能的地方簡單地使用它。

事實上,必須很少使用它,僅用於發現繼承實際上有用的場景。 確定一個人是否應該使用繼承或組合的最簡單方法之一是詢問自己是否需要從新演員表向上轉換為基礎演員表。 如果向上轉換是必要的,那麼就必須使用繼承。 但是,如果這不是一項要求,則必須進一步詳述繼承的必要性。

垂頭喪氣

向下轉換是對像類型轉換的另一種形式,用於將子類引用對象指定給 Java 中不允許的父類。 垂頭喪氣並不太難理解。 例如,如果有一個基類和一個間接或間接從基類派生的類,那麼任何時候基類類型的對象繼續被類型轉換為派生類,它被稱為向下轉換。 因此,根據向下轉換,人們將通過努力獲取基類對象然後將其轉換為派生類類型來沿著繼承圖向下移動。 但是,重要的是要注意,根據正在編寫的代碼,向下轉換可能有意義,也可能沒有意義。

當人們執行向下轉換系統時,他們不會遇到任何類型的編譯器錯誤。 但是,他們將面臨 java.lang.ClassCastException,這是一個運行時異常。 所以現在問題出現了,如果在 Java 中無法進行向下轉換,那麼人們為什麼要執行它呢? 簡單地說,向下轉換只能在父類引用的對象屬於子類的特定情況下使用。

在將一個對象與另一個對象進行比較時,向下轉換非常有用。

要檢查向下轉換是否有效,可以運行

getClass() 系統使開發人員能夠了解傳入對象的類,然後將其與當前類進行比較。 如果它們不相等,則向下轉換無效,嘗試此過程將毫無意義。 向下轉換的概念主要使用超類型到子類型的轉換。 這種鑄造過程通常以顯式方式完成。 這基本上意味著較大尺寸的類型被明確地適合小尺寸類型。

向上轉型與向下轉型

上調和。 向下轉換具有某些非常特殊的差異。 其中一些已在以下指針中簡要強調:

  • 在向上轉換中,子對像被類型轉換為父對象。 另一方面,當涉及向下轉換時,父類對象的引用最終會傳遞給子類。
  • 人們可以顯式地和隱式地執行向上轉換,而只能顯式地執行向下轉換。
  • 在向上轉換的情況下,人們可以在子類中訪問父類的變量和方法,反之則不行。 然而,在向下轉換中,這兩個類的變量和方法都很容易訪問。
  • Upcasting 只允許訪問特定的子類方法。 在執行向下轉換時,兩個類下的所有方法和變量都可以訪問。

結論

在 Java 中很少使用向上轉換。 在大多數情況下,人們在必須開發只處理父類的代碼時使用它。 在開發提供對子類行為的訪問的代碼時,傾向於使用向下轉換。

如果你想學習Java並獲得云計算認證, upGrad 提供雲計算高級證書課程 為期 7.5 個月的在線課程專為在職專業人士設計,幫助他們進入雲計算角色。

成為全棧開發人員

立即申請利物浦約翰摩爾斯的計算機科學碩士