你真的理解了繼承和多型嗎

2021-08-29 22:29:52 字數 594 閱讀 3327

public class doyoureallyunderstandpolymorphism

} class a

} class b extends a

}

解釋:

直觀的講,我們很容易輕信當"a = b;"以後,變數a指向的物件是b類的b那個物件,自然a.s就應該等同於b.s,然而事實並非如此。當b繼承a時,父類a的字段s並沒有被b的字段s取代,而是保留了乙份拷貝,所謂重寫(override),那是對方法而言的。於是,當我們new b()時,在實際建立的物件中,包含了兩個版本的字段s,乙個"[a]"(屬於a類)乙個""(屬於b類)。而方法gets()只有乙個版本。這就是在繼承過程中字段和方法的區別。也就是說,重寫的概念和字段無關。在第16行,我們通過a.s訪問的是b這個物件中保留的a類的字段s;而在21行,我們改變的正是這個a類版本的s欄位。

多型的精髓在於動態確定物件的行為,而物件的行為體現在方法而非欄位,字段代表的更多的是物件的狀態。於是只有方法的多型而沒有欄位的多型。從上面的**可以看出,不管你用什麼型別的變數存放物件b的引用,最終呼叫的方法版本都是b的真實型別那個版本,這就是多型的威力。

你真的理解補碼嗎?

計算機數值運算的基礎硬體就是加法器,所以我們就從加法器講起。加法器是計算機數值計算的最基礎硬體單元,加減乘除都是以加法器為基礎實現的。加法器的構成如下圖所示,其中s是和數,c是進製。半加器電路是指對兩個輸入資料位相加,輸出乙個結果位和進製,沒有進製輸入的加法器電路。是實現兩個一位二進位制數的加法運算...

你真的理解 React Hooks 嗎

react hooks 是在 react 16.8 版本新增的特性,在我看了 react 官網 和一些部落格對 react hook 的講解後還是覺得沒有 get 到本質。大部分的 react hook 的講解都是針對於 react hook 的作用 使用規則 定義規則等。對於新手來說還是覺得會使用...

ios開發之你真的了解了KVC嗎?

之前一直以為自己了解kvc 其實只是井底之蛙啦,真正的要把kvc原原本本的說出來還真的不是一件簡單的事情。於是今天寫下這邊文章,告誡自己要知其然還要知其所以然。key value coding,它是一種使用字串識別符號,間接訪問物件屬性的機制,而不是直接呼叫getter 和 setter方法。通常我...