問題點:如何具體理解父類的引用? 答:這個父類就是這個子類的另一種形態,可指向
多型的通俗理解:
說白了,乙隻貓過來了,可以說:「這貓好可愛」,也可以說「這小動物很可愛」,就是說貓具備了「貓 」和 「動物」這兩種形態,多型就這樣理解!
動物 y = new 貓(); 看到這樣的現象就可以看做是多型的出現了!
多型的好處:
父類引用子類物件建立方法,直接體驗多型的好處,剩寫了好多**。
同時前期定義的**可以使用後期的內容。
多型的弊端:
前期定義的內容不能使用(呼叫)後期子類的特有內容,打個比方:就是說貓這個物件,不能從動物這個類中拿到抓老鼠的方法,因為其它動物不一定具備嘛~~!
多型的前提:
1,必須有關係,繼承,實現。
2,要有覆蓋。(要實現方法,不然怎麼搞?)
多型的轉型:
自動型別提公升,貓物件提公升了動物型別。那就不能按照貓的特有性質來操作了,就用動物的方式來操作吧!
限制對特有功能的訪問(我操作共有的功能)
向下轉型的目的是為了使用子類的特有方法。
對於轉型,自始至終都是子類物件在做著型別的變化。
畢老師和畢姥爺的故事:
注意都是子類物件在做著轉換,別拿父類來搞,一下搞出異常來了!
判斷個animal,傳什麼都能進!!!貓是不是動物?狗是不是動物?那不什麼動物都能抓老鼠?
覆蓋只發生在函式上
多型時,
成員的特點:
1,成員變數。
編譯時:參考引用型變數所屬的類中的是否有呼叫的成員變數,有,編譯通過,沒有,編譯失敗。
執行時:參考引用型變數所屬的類中的是否有呼叫的成員變數,並執行該所屬類中的成員變數。
簡單說:編譯和執行都參考等號的左邊。哦了。
作為了解。(面試的時候用,誰他媽無聊在子父類中定義同樣的變數?)
編譯報錯!比方:如果動物類不能吃飯,貓類能吃嗎?貓可是動物的一種!動物不能吃!貓就不能吃!
2,成員函式(非靜態)。
編譯時:參考引用型變數所屬的類中的是否有呼叫的函式。有,編譯通過,沒有,編譯失敗。
執行時:參考的是物件所屬的類中是否有呼叫的函式。
簡單說:編譯看左邊,執行看右邊。
因為成員函式存在覆蓋特性。
非靜態的成員函式動態跟著物件繫結,靜態的呢,就可以直接呼叫,以為著載入的時候靜態就有所屬類了!(靜態函式不依賴物件了,fu f = new zi(); 跟zi類就關係!)
3,靜態函式。
編譯時:參考引用型變數所屬的類中的是否有呼叫的靜態方法。
執行時:參考引用型變數所屬的類中的是否有呼叫的靜態方法。
簡單說,編譯和執行都看左邊。
其實對於靜態方法,是不需要物件的。直接用類名呼叫即可。
多型中成員變數與靜態函式 都是看左邊,非成員函編譯看左邊,執行看右邊。
黑馬程式設計師 多型
asp.net android ios rel noopener noreferrer target blank asp.net android ios開發 net rel noopener noreferrer target blank net培訓 期待與您交流!多型 理解為事物存在的多種體現形似...
黑馬程式設計師 多型
多型 可理解為事物存在的多種體現形態。人 男人 女人 動物 貓 狗 貓 c new 貓 動物 c new 貓 可理解為父類引用指向子類物件,是多型在物件上的體現性。而過載和覆蓋則是多型在函式上的體現性。下面將從以下四個方面學習多型 1 多型的表現形式 父類的引用指向了自己的子類物件。父類的引用也可以...
黑馬程式設計師 多型
多型定義 某一類事物的多種存在形態。例 動物中貓,狗。貓這個物件對應的型別是貓型別 貓 x new 貓 同時貓也是動物中的一種,也可以把貓稱為 動物。動物 y new 貓 動物是貓和狗具體事物中抽取出來的父型別。父型別引用指向了子類物件。體現 父類或者介面的引用指向或者接收自己的子類物件。作用 多型...