知識點劃重點 向上轉型問題

2022-09-12 22:33:24 字數 1628 閱讀 4909

問題的起因:今天在敲**的時候用到了linkedlist,眾所周知,linkedlist實現了list介面,於是我就這樣宣告了乙個變數:listlinklist=new linkedlist<>();

然後在**中我需要獲取list的第乙個值,我清清楚楚明明白白記得linkedlist中有乙個getfirst方法,於是乎我信誓旦旦的寫下linklist.getfirst();

噹噹噹噹、、編譯器猝不及防的就給了我乙個紅叉叉,說找不到這個方法,我,恩?wtf? 恩?我開始陷入自我懷疑,難道linkedlist裡邊沒有這個方法?點開原始碼、這個方法不是安安靜靜的躺在那裡等著呼叫的嘛、為什麼我用!不!了!?

好吧,冷靜如我,當然要來分析原因了,憑著我紮實的基本功(唔、有基本功估計就不會犯這個錯誤了、、)我敏銳的感覺到,大概是型別轉化的問題、

一路看下來發現之前竟然沒有注意過這個問題,又有一種j**a白學了的趕腳、好吧,亡羊補牢,為時不晚、看看這個問題吧,首先看一段**,該**摘自

1

class

fu 7

8public

static

void

function() 11}

1213

class zi extends

fu 20

21public

void

method()

2425

public

static

void

function() 28}

2930

public

class

duotaidemo

44 }

猜一猜這段**的結果是什麼咩、對的,就是

show zi

function fu

說實話,一開始我對執行結果還是持有懷疑的,我本著實踐出真知的目的執行了這段**,呵呵,臉生疼,終於認清自己渣的不能再渣的本質、

解釋一下吧,其實敲**的時候就會發現,當寫子類的show方法時,只打乙個show,編輯器就會給出重寫show方法的提示,也就是說show方法是重寫父類的,由多型的性質可知是在執行時動態指定執行方法的。

但是在子類寫靜態方法function就不會提示是重寫父類的方法。靜態的方法可以被繼承,但是不能重寫。如果父類中有乙個靜態的方法,子類也有乙個與其方法名,引數型別,引數個數都一樣的方法,並且也有static關鍵字修飾,那麼該子類的方法會把原來繼承過來的父類的方法隱藏,而不是重寫。通俗的講就是父類的方法和子類的方法是兩個沒有關係的方法,具體呼叫哪乙個方法是看是哪個物件的引用;這種父子類方法也不在存在多型的性質。而上述**段中呼叫function的是f,是乙個fu類的引用,所以呼叫的是fu類的function方法。

綜上所述:我們可以看到多型中的成員訪問特點:

構造方法

成員方法

問題一:什麼是多型?

多型就是同乙個介面,使用不同的例項而執行不同操作

問題二:多型的優點

問題三:多型存在的三個必要條件

注意:當使用多型方式呼叫方法時,首先檢查父類中是否有該方法,如果沒有,則編譯錯誤(這就是為什麼前邊呼叫linkedlist的getfirst方法報錯的原因,因為父介面list中沒有定義該方法。);如果有,再去呼叫子類的同名方法。

好記性不如爛筆頭,本渣總結到此了,有問題歡迎指正、

python的重點 python知識點

author lei import os os.path.join 將分離的部分合成乙個整體 filename os.path.join home ubuntu python coding split func print filename 輸出為 home ubuntu python coding...

python 重點理論知識點

python多執行緒 gil blablabla concurrent blablabla 簡單地說就是作為可能是僅有的支援多執行緒的解釋型語言 perl的多執行緒是殘疾,php沒有多執行緒 python的多執行緒是有compromise的,在任意時間只有乙個python直譯器在解釋python b...

css盒模型重點知識點

標準盒模型,這個瀏覽器預設的方式 box sizing content box ie盒模型 box sizing border box 概念bfc主要用來解決邊距重疊的問題 與它類似的還有乙個叫做ifc 如何建立bfc bfc的使用場景 class wrap 1section 2section di...