1 6 為什麼使用向上轉型而不直接建立子類物件?

2021-10-10 00:20:45 字數 1105 閱讀 7310

初學者在學習向上轉型可能會很難理解,向上轉型並不能呼叫子類特有屬性和方法,我們必須先生成子類例項再賦值給父類引用(向上轉型),然後將父類引用向下強制轉換給子類引用(向下轉型),這樣才能呼叫子類中的所有成員。這看起來像是多次一舉,還不如直接建立子類例項。

隨著技術的提公升,我們在學習其它開源專案時會發現很多地方都用了向上轉型和向下轉型的技術。本節將帶大家了解向上轉型和向下轉型的意義及使用場景。

例 1

定義父類 animal,**如下:

public

class

animal

public

static

void

dosleep

(animal animal)

public

static

void

main

(string[

] args)

}

子類 cat **如下:

public

class

catextends

animal

}

子類 dog **如下:

public

class

dogextends

animal

}

輸出結果為:

貓正在睡覺

狗正在睡覺

如果不用向上轉型則必須寫兩個 dosleep 方法,乙個傳遞 cat 類物件,乙個傳遞 dog 類物件。這還是兩個子類,如果有多個子類就要寫很多相同的方法,造成重複。可以看出向上轉型更好的體現了類的多型性,增強了程式的間接性以及提高了**的可擴充套件性。當需要用到子類特有的方法時可以向下轉型,這也就是為什麼要向下轉型。

比如設計乙個父類 fileread 用來讀取檔案,excelread 類和 wordread 類繼承 fileread 類。在使用程式的時候,往往事先不知道我們要讀入的是 excel 還是 word。所以我們向上轉型用父類去接收,然後在父類中實現自動繫結,這樣無論你傳進來的是 excel 還是 word 就都能夠完成檔案讀取。

總結如下:

為什麼要用MAC位址,而不直接使用IP位址?

你已經有了手機號,為什麼還要乙個身份證號呢?mac位址就像身份證一樣,它只唯一的標誌乙個網路介面,它沒有被設計為具有定址功能。全世界存在各種各樣的異構網路,它們使用不同的硬體位址 網路的異構性體現 要使這些異構網路能夠進行通訊,就需要非常複雜的硬體位址轉換工作,因此由使用者主機來完成這件事幾乎是不可...

為什麼要用vuex,而不是直接使用全域性變數

這個問題問的太好了 我迅速要回你們 每乙個 vuex 應用的核心就是store 倉庫 它包含著你的應用中大部分的狀態 state 狀態管理有5個核心 state getter mutation action module 1 vuex的儲存時響應式的,當元件vue中store更改,相應的元件用到的地...

為什麼要用稀疏自編碼而不直接設更少的隱層節點

剛學自編碼,以下是本人關於題目問題的一點思考。自編碼器是一種非常簡單的bp神經網路,是一種無監督學習演算法。使用乙個三層 只有乙個隱含層 的自編碼網路,然後設定隱含節點的數量少於輸入層節點,就能夠輕鬆地實現特徵降維。如圖 fig1.自編碼器網路結構 來自網路 refer to deep learni...