版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第Java繼承與多態(tài)超詳細(xì)梳理目錄一、繼承1、繼承的概念2、繼承的語(yǔ)法3、父類(lèi)成員訪問(wèn)(1)子類(lèi)中訪問(wèn)父類(lèi)的成員變量(2)子類(lèi)中訪問(wèn)父類(lèi)的成員方法4、super關(guān)鍵字5、子類(lèi)構(gòu)造方法6、super和this7、代碼塊執(zhí)行順序8、繼承方式9、final關(guān)鍵字10、繼承和組合二、多態(tài)1、向上轉(zhuǎn)型2、重寫(xiě)3、多態(tài)
一、繼承
1、繼承的概念
繼承機(jī)制:是面向?qū)ο蟪绦蛟O(shè)計(jì)是代碼可以復(fù)用的最重要手段,允許程序員在保持原有類(lèi)特性的基礎(chǔ)上進(jìn)行擴(kuò)展,增加新的功能,產(chǎn)生的新類(lèi),成為派生類(lèi)/子類(lèi)。繼承主要解決的問(wèn)題是:共性的抽取,實(shí)現(xiàn)代碼的復(fù)用。
2、繼承的語(yǔ)法
表示類(lèi)與類(lèi)的繼承關(guān)系,需要借助關(guān)鍵字extends,語(yǔ)法如下:
修飾符class子類(lèi)/派生類(lèi)extends父類(lèi)/基類(lèi)/超類(lèi){
//
}
子類(lèi)會(huì)將父類(lèi)的成員變量或者成員方法繼承到子類(lèi)中子類(lèi)繼承父類(lèi)后,必須添加自己特有的成員,體現(xiàn)與基類(lèi)的不同
3、父類(lèi)成員訪問(wèn)
(1)子類(lèi)中訪問(wèn)父類(lèi)的成員變量
不存在同名成員變量時(shí),正常訪問(wèn)就行存在同名成員變量,使用(super.變量名)實(shí)現(xiàn)父類(lèi)成員變量的訪問(wèn)
publicclassBase{
inta;
intb;
intc;
publicclassDerivedextendsBase{
inta;//與父類(lèi)中成員a同名,且類(lèi)型相同
charb;//與父類(lèi)中成員b同名,但類(lèi)型不同
publicvoidmethod(){
a=100;//訪問(wèn)父類(lèi)繼承的a,還是子類(lèi)自己新增的a?
b=101;//訪問(wèn)父類(lèi)繼承的b,還是子類(lèi)自己新增的b
c=102;//子類(lèi)沒(méi)有c,訪問(wèn)的肯定是從父類(lèi)繼承下來(lái)的c
}
訪問(wèn)成員變量時(shí),優(yōu)先訪問(wèn)自己的成員變量。即同名成員變量訪問(wèn)時(shí),優(yōu)先訪問(wèn)子類(lèi)的。即:子類(lèi)將父類(lèi)的成員隱藏了成員變量訪問(wèn)遵循就近原則,自己有優(yōu)先自己的,自己沒(méi)有則向父類(lèi)中查找。
(2)子類(lèi)中訪問(wèn)父類(lèi)的成員方法
成員方法名字不同,正常訪問(wèn)即可成員方法名字相同,可以通過(guò)【super.方法名】訪問(wèn)同名父類(lèi)方法
如果父類(lèi)和子類(lèi)同名方法的參數(shù)列表不同(重載),根據(jù)調(diào)用方法時(shí)傳遞的參數(shù)選擇合適的方法訪問(wèn)。
如果父類(lèi)和子類(lèi)的同名方法原型一致,則訪問(wèn)子類(lèi)的
4、super關(guān)鍵字
super關(guān)鍵字的主要作用是:在子類(lèi)方法中訪問(wèn)父類(lèi)的同名成員。(只能在非靜態(tài)方法中使用)
publicclassBase{
inta;
intb;
publicvoidmethodA(){
System.out.println("Base中的methodA()");
publicvoidmethodB(){
System.out.println("Base中的methodB()");
publicclassDerivedextendsBase{
inta;
charb;
//與父類(lèi)中methodA()構(gòu)成重載
publicvoidmethodA(inta){
System.out.println("Derived中的method()方法");
//與父類(lèi)中methodB()構(gòu)成重寫(xiě)
publicvoidmethodB(){
System.out.println("Derived中的methodB()方法");
publicvoidmethodC(){
a=100;//等價(jià)于:this.a=100;
b=101;//等價(jià)于:this.b=101;
//訪問(wèn)父類(lèi)的成員變量時(shí),需要借助super關(guān)鍵字
//super是獲取到子類(lèi)對(duì)象中從基類(lèi)繼承下來(lái)的部分
super.a=200;
super.b=201;
methodA();//沒(méi)有傳參,訪問(wèn)父類(lèi)中的methodA()
methodA(20);//傳遞int參數(shù),訪問(wèn)子類(lèi)中的methodA(int)
methodB();//直接訪問(wèn),則永遠(yuǎn)訪問(wèn)到的都是子類(lèi)中的methodA(),基類(lèi)的無(wú)法訪問(wèn)到
super.methodB();//訪問(wèn)基類(lèi)的methodB()
}
5、子類(lèi)構(gòu)造方法
子類(lèi)對(duì)象構(gòu)造時(shí),需要先調(diào)用父類(lèi)的構(gòu)造方法,然后執(zhí)行子類(lèi)的構(gòu)造方法。
publicclassBase{
publicBase(){
System.out.println("Base()");
publicclassDerivedextendsBase{
publicDerived(){
//super();//注意子類(lèi)構(gòu)造方法中默認(rèn)會(huì)調(diào)用基類(lèi)的無(wú)參構(gòu)造方法:super(),
//用戶沒(méi)有寫(xiě)時(shí),編譯器會(huì)自動(dòng)添加,而且super()必須是子類(lèi)構(gòu)造方法中第一條語(yǔ)句,
//并且只能出現(xiàn)一次
System.out.println("Derived()");
}
若父類(lèi)顯示定義無(wú)參或者默認(rèn)的構(gòu)造函數(shù),在子類(lèi)的構(gòu)造方法第一行默認(rèn)有隱含的super()調(diào)用。父類(lèi)定義帶參數(shù)的構(gòu)造方法時(shí),編譯器不會(huì)再給子類(lèi)生成默認(rèn)的構(gòu)造方法,需要子類(lèi)顯式定義,并在子類(lèi)構(gòu)造方法中調(diào)用合適的父類(lèi)構(gòu)造方法子類(lèi)構(gòu)造方法中,super()調(diào)用父類(lèi)構(gòu)造方法,必須是子類(lèi)構(gòu)造方法的第一條語(yǔ)句super()只能在子類(lèi)構(gòu)造方法中出現(xiàn)一次,并且不能和this同時(shí)出現(xiàn)
6、super和this
super和this都可以在成員方法中用來(lái)訪問(wèn)成員變量和調(diào)用其他的成員函數(shù),都可以作為構(gòu)造方法的第一條語(yǔ)句,那么它們之間的區(qū)別是什么?
(1)相同點(diǎn)
都是java的關(guān)鍵字只能在類(lèi)的非靜態(tài)方法中使用,用來(lái)訪問(wèn)非靜態(tài)成員方法和屬性必須作為構(gòu)造方法中的第一條語(yǔ)句,并且不能同時(shí)存在
(2)不同點(diǎn)
this是當(dāng)前對(duì)象的引用,super是子類(lèi)對(duì)象中從父類(lèi)繼承的成員的引用this是非靜態(tài)成員方法的一個(gè)隱藏參數(shù),super不是隱藏參數(shù)在構(gòu)造方法中:this()用于調(diào)用本類(lèi)的構(gòu)造方法,super()用來(lái)調(diào)用父類(lèi)構(gòu)造方法,兩種調(diào)用不能同時(shí)出現(xiàn)在構(gòu)造方法中子類(lèi)的構(gòu)造方法中一定會(huì)存在super()的調(diào)用,但是this()用戶不寫(xiě)就沒(méi)有
7、代碼塊執(zhí)行順序
【普通類(lèi)】
靜態(tài)代碼塊先執(zhí)行,并且只執(zhí)行一次,在類(lèi)加載階段執(zhí)行當(dāng)有對(duì)象創(chuàng)建時(shí),才會(huì)執(zhí)行實(shí)例代碼塊,最后執(zhí)行構(gòu)造方法
【繼承關(guān)系上的執(zhí)行順序】
父類(lèi)靜態(tài)代碼塊優(yōu)先于子類(lèi)靜態(tài)代碼塊執(zhí)行,最早執(zhí)行父類(lèi)實(shí)例代碼塊和父類(lèi)構(gòu)造方法緊接著執(zhí)行子類(lèi)的實(shí)例代碼塊和構(gòu)造方法最后執(zhí)行第二次實(shí)例化子類(lèi)對(duì)象時(shí),父類(lèi)和子類(lèi)的靜態(tài)代碼塊不會(huì)再執(zhí)行
8、繼承方式
【注】Java中不支持多繼承
super只能指代直接父類(lèi)繼承關(guān)系一般不超過(guò)三層
9、final關(guān)鍵字
修飾變量時(shí),表示常量(不能修改)修飾類(lèi):此類(lèi)不能被繼承修飾方法:表示方法不能被重寫(xiě)
10、繼承和組合
組合和繼承都能實(shí)現(xiàn)代碼的復(fù)用。組合沒(méi)有涉及到特殊的語(yǔ)法(如extend關(guān)鍵字),僅僅是將一個(gè)類(lèi)的實(shí)例作為另一個(gè)類(lèi)的屬性。
繼承表示對(duì)象與對(duì)象之間是is-a的關(guān)系組合表示對(duì)象與對(duì)象之間是has-a的關(guān)系
一般建議:能用組合盡量用組合
二、多態(tài)
1、向上轉(zhuǎn)型
通過(guò)父類(lèi)類(lèi)型的引用調(diào)用子類(lèi)對(duì)象,向上轉(zhuǎn)型是安全的
【發(fā)生向上轉(zhuǎn)型的時(shí)機(jī)】
直接賦值方法傳參函數(shù)的返回值
publicclassTestAnimal{
//2.函數(shù)傳參:形參為父類(lèi)引用,可以接收任意子類(lèi)的對(duì)象
publicstaticvoideatFood(Animala){
a.eat();
//3.作返回值:返回任意子類(lèi)對(duì)象
publicstaticAnimalbuyAnimal(Stringvar){
if("狗"==var){
returnnewDog("狗狗",1);
}elseif("貓"==var){
returnnewCat("貓貓",1);
}else{
returnnull;
publicstaticvoidmain(String[]args){
Animalcat=newCat("元寶",2);//1.直接賦值:子類(lèi)對(duì)象賦值給父類(lèi)對(duì)象
Dogdog=newDog("小七",1);
}
優(yōu)缺點(diǎn):
優(yōu)點(diǎn):讓代碼更加靈活缺點(diǎn):不能訪問(wèn)到子類(lèi)特有的方法
2、重寫(xiě)
函數(shù)名相同、參數(shù)列表相同、返回值相同或是【協(xié)變類(lèi)型】(父子類(lèi)關(guān)系)
【方法重寫(xiě)的規(guī)則】
重寫(xiě)的方法訪問(wèn)權(quán)限不能比父類(lèi)中原方法的的權(quán)限低;父類(lèi)中被static、private、final修飾的方法、構(gòu)造方法不能被重寫(xiě);重寫(xiě)的方法,可以使用@override注解來(lái)顯示指定(幫助我們進(jìn)行一些合法性的檢驗(yàn))。比如方法名拼寫(xiě)錯(cuò)誤,編譯會(huì)報(bào)錯(cuò);重寫(xiě)的返回值類(lèi)型可以不同,但是必須具有父子關(guān)系。被final修飾的方法,叫做密封方法,該方法不能被重寫(xiě)。外部類(lèi)只能是public或者默認(rèn)權(quán)限
【動(dòng)態(tài)綁定和靜態(tài)綁定】
動(dòng)態(tài)綁定:發(fā)生的條件(1、父類(lèi)引用引用子類(lèi)對(duì)象;2、通過(guò)父類(lèi)引用,可以訪問(wèn)到子類(lèi)中的方法)。后期綁定,即在編譯時(shí)不能確定方法的行為,需要等到程序運(yùn)行時(shí),才能夠確定調(diào)用哪個(gè)類(lèi)的方法;靜態(tài)綁定:前期綁定,編譯時(shí),根據(jù)用戶傳遞的參數(shù)類(lèi)型確定具體的調(diào)用方法(函數(shù)重載)
3、多態(tài)
一個(gè)引用調(diào)用同一個(gè)方法,可以表現(xiàn)出不同的形式,這種思想稱(chēng)為多態(tài)。在父類(lèi)的構(gòu)造方法中不要調(diào)用重寫(xiě)的方法。
【多態(tài)實(shí)現(xiàn)的條件】
必須在繼承條件下子類(lèi)對(duì)父類(lèi)方法進(jìn)行重寫(xiě)通過(guò)父類(lèi)引用調(diào)用重寫(xiě)的方法發(fā)生了向上轉(zhuǎn)型
publicclassAnimal(){
Stringname;
intage;
publicAnimal(Stringname,intage){
=name;
this.age=age;
publicvoideat(){
System.out.println(name+"吃飯");
publicclassCatextendsAnimal{
publicCat(Stringname,intage){
super(name,age);
@Override
publicvoideat(){
System.out.println(name+"吃魚(yú)~~~");
publicclassDogextendsAnimal{
publicDog(Stringname,intage){
super(name,age);
@Override
publicvoideat(){
System.out.println(name+"吃骨頭~~~");
publicclassTestAnimal{
//編譯器在編譯代碼時(shí),并不知道要調(diào)用Dog還是Cat中eat的方法
//等程序運(yùn)行起來(lái)后,形參a引用的具體對(duì)象確定后,才知道調(diào)用那個(gè)方法
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 路堤接頭施工方案(3篇)
- 2026年安陽(yáng)市龍安區(qū)人社局招聘社區(qū)人社服務(wù)專(zhuān)員(原人社協(xié)管員)8人備考考試題庫(kù)及答案解析
- 飛機(jī)停車(chē)指揮培訓(xùn)課件教學(xué)
- 2026貴州貴陽(yáng)市觀山湖區(qū)第二幼兒園第二分園招聘3人備考考試題庫(kù)及答案解析
- 2026年福建中閩海上風(fēng)電有限公司招聘3-5人備考考試題庫(kù)及答案解析
- 2026甘肅酒肅州區(qū)泉民健康復(fù)醫(yī)院招聘4人考試參考試題及答案解析
- 2026一季度湖南張家界市本級(jí)招募就業(yè)見(jiàn)習(xí)人員119人筆試模擬試題及答案解析
- 2026山東淄博文昌湖省級(jí)旅游度假區(qū)面向大學(xué)生退役士兵專(zhuān)項(xiàng)崗位公開(kāi)招聘工作人員參考考試題庫(kù)及答案解析
- 2026云南昆明市呈貢區(qū)婦幼健康服務(wù)中心招聘1人參考考試題庫(kù)及答案解析
- 第十一課ieüeer第一課時(shí)
- 開(kāi)封大學(xué)單招職業(yè)技能測(cè)試參考試題庫(kù)(含答案)
- 既有建筑幕墻安全性鑒定技術(shù)規(guī)程(征求意見(jiàn)稿)
- 施工總平面布置圖范本
- 嬰幼兒輔食添加及食譜制作
- 安全生產(chǎn)標(biāo)準(zhǔn)化對(duì)企業(yè)的影響安全生產(chǎn)
- 隨訪管理系統(tǒng)功能參數(shù)
- SH/T 0362-1996抗氨汽輪機(jī)油
- GB/T 23280-2009開(kāi)式壓力機(jī)精度
- GB/T 17213.4-2015工業(yè)過(guò)程控制閥第4部分:檢驗(yàn)和例行試驗(yàn)
- FZ/T 73009-2021山羊絨針織品
- GB∕T 5900.2-2022 機(jī)床 主軸端部與卡盤(pán)連接尺寸 第2部分:凸輪鎖緊型
評(píng)論
0/150
提交評(píng)論