/**所有的class的頂級父類均為jdk中的object類*/
public
class
apublic
class
bextends
apublic
class
cextends
b
載入順序不可繼承使用情況
缺點
public
class
test
}class
apublic
void
showaa()
}class
bextends
apublic
void
showb()
}
解析:
向上轉型:父類引用子類物件[父類 obj = new 子類()]
時,子類會自動轉型(非強轉)
為父類物件,並操作父類物件中非private
修飾的所有建構函式、屬性、方法
向下轉型:父類引用子類物件[父類 obj = new 子類()]
時,若想操作父類中不存在的方法,則需要手動轉換子類物件的引用(b2)
為子類物件。
注意:向上(向下)轉型的必要條件一定要有繼承,且滿足父類引用子類物件,即:父類 obj = new 子類()
多型分為編譯時多型和執行時多型,即靜態繫結和動態繫結
多型三要素:繼承 重寫 向上轉型
public
class
test
}classa}
class
bextendsa}
class
cextends
a}
解析:
由上方**可了解,相同的父類引用[a]
指向不同子類物件,所呼叫的show()
方法由指向物件決定,動態呼叫不同指向物件的父類重寫方法,這一機制成為多型(通過動態繫結實現)
優先順序由高到低依次為:this.show(obj)
>super.show(obj)
>this.show((super)obj)
>super.show((super)obj)
public
class
test
}class
apublic string show
(a obj)
}class
bextends
apublic string show
(a obj)
}class
cextends
bclass
dextends
b
解析:以ab.show(b)舉例
ab
是乙個引用變數,型別為class a
,則this為class a
使用this.show(obj),本例為 a.show(b obj)無果:class a中無當前方法
使用super.show(obj),本例為 (super)a.show(b obj)無果:a的超類object不參與
使用this.show((super) obj),本例為 a.show(a obj) ,根據繼承中子類重寫父類方法載入順序優先順序高於父類原則,實際呼叫方法為b.show(a obj)輸出:b --> a
類的訪問控制關鍵字
類內部本包
子類外部包
public√√
√√protected√√
√
×default√√
××private√×
××
JavaSE 基礎(封裝,繼承,多型)
繼承是從已有類得到繼承資訊建立新類的過程。提供繼承資訊的類被稱為父類 超類 基類 得到繼承資訊的類被稱為子類 派生類 繼承讓變化中的軟體系統有了一定的延續性,同時繼承也是封裝程式中可變因素的重要手段。通常認為封裝是把資料和運算元據的方法繫結起來,對資料的訪問只能通過已定義的介面。物件導向的本質就是將...
002 簡書樣式
寫在前面的話 以前了每次使用的時候都要進行文件的查詢,現在打算自己做乙個大致我以後回用到的功能模板,以後使用的時候直接進行複製就好了 文字1文字2文字3 1第一章第三節 前0後1 第一小節 好像只能到,後面不能再繼續了 第二小節 好像只能到,後面不能再繼續了 第三小節 好像只能到,後面不能再繼續了 ...
搬離簡書指南!
jianshu 登入到後台 解壓指令碼放到.md檔案的同級目錄 執行指令碼 自動建立資料夾為分類 自動建立資料夾為分類 自動將網路鏈結改為本地鏈結 網路鏈結改為本地鏈結 指令碼原始碼 python3環境 import re import urllib.request import urllib.pa...