溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Java中的繼承和多態(tài)是什么

發(fā)布時間:2020-06-09 20:53:08 來源:億速云 閱讀:257 作者:元一 欄目:編程語言

Java

Java是一個面向?qū)ο蟮恼Z言。對程序員來說,這意味著要注意應(yīng)中的數(shù)據(jù)和操縱數(shù)據(jù)的方法(method),而不是嚴(yán)格地用過程來思考。在一個面向?qū)ο蟮南到y(tǒng)中,類(class)是數(shù)據(jù)和操作數(shù)據(jù)的方法的集合。數(shù)據(jù)和方法一起描述對象(object)的狀態(tài)和行為。

每一對象是其狀態(tài)和行為的封裝。類是按一定體系和層次安排的,使得子類可以從超類繼承行為。在這個類層次體系中有一個根類,它是具有一般行為的類。

繼承的概念:

將多個類中的共同代碼單獨提取出來,形成一個獨立的類,        多個類和當(dāng)前獨立的類產(chǎn)生一種關(guān)系: 繼承關(guān)系  extends

繼承的好處:

    1)提高了代碼的復(fù)用性     
    2)提高了代碼維護(hù)性      
    3)類和類產(chǎn)生這種關(guān)系,是多態(tài)的前提條件!

Java中繼承的特點:

1)在Java中,只支持單繼承,不支持多繼承,在別的語言可能有多繼承存在多繼承的語言:class 子類名 extends 父類名,父類名2{}        

2)在Java中,雖然不支持多繼承,但是可以多層繼承!    (分層初始化:先讓父類初始化再是子類初始化)
3)在Java中,所有的Java類(自己定義的,Jdk提供的)都繼承自 Object類 (超類)

繼承中的注意事項:

1)子類繼承父類,只能繼承父類非私有的成員(成員變量,成員方法),但是可以通過公共方法間接的訪問!

2)子類不能繼承父類的構(gòu)造方法,但是可以通過關(guān)鍵字           間接訪問父類的構(gòu)造方法(等會講super)
3)不要為了部分使用功能去使用"繼承"

繼承中成員的組成
成員變量
構(gòu)造方法
成員方法

成員變量
1)子類繼承父類,子類中的成員變量名稱和父類中的成員變量不一致的情況:比較簡單,分別輸出!
2)子類繼承父類,子類中的成員變量名稱和父類中的成員名稱一致的情況:(重點)
    a)先在子類的局部位置中找,如果存在,就使用
    b)如果在類的局部位置沒有,那么在子類的成員位置找,如果存在,就使用
    c)如果子類的成員位置沒有,那么在父類的成員位置找,如果存在,就使用
    d)如果父類的成員位置都沒有,那么就報錯!

繼承中構(gòu)造方法初始化的特點(分層初始化!)

繼承中,子類不能繼承父類的構(gòu)造方法,但是可以通過super訪問父類的構(gòu)造方法

子類的構(gòu)造方法中(無參/有參),都會默認(rèn)訪問父類的無參構(gòu)造方法,

由于子類繼承父類,子類可能會用到父類中數(shù)據(jù),所以先讓父類進(jìn)行初始化,再讓子類初始化!(分層初始化!)
關(guān)于super():訪問無參構(gòu)造方法,必須寫在子類構(gòu)造方法中第一句話

什么是多態(tài):
一個事物在不同時刻的不同狀態(tài)
舉例:

Animal a = new Cat() ;      //貓是動物
Cat c = new Cat() ; //貓是貓

多態(tài)內(nèi)存圖:
Java中的繼承和多態(tài)是什么

多態(tài)的前提條件:

1)必須有繼承關(guān)系 (產(chǎn)生一個中extends 關(guān)系)            
2)需要有方法重寫子類繼承父類的時候,需要使用子類的功能,需要將父類的功能覆蓋掉! 舉例:貓狗案例
Animal, eat()和sleep(),每個動物的吃和睡的行為不同!            
3)必須有父類引用指向子類對象       (向上轉(zhuǎn)型)
Fu f = new Zi()  ; 在內(nèi)存中使用子類實例化(創(chuàng)建對象),但是子類繼承父類,通過構(gòu)造方法 讓父類初始化

多態(tài)的好處:

1)提高代碼的維護(hù)性(繼承來保證)        
2)提高代碼的擴(kuò)展性(由多態(tài)保證)

多態(tài)的成員訪問特點:
Fu f = new Zi() ;

1)成員變量(非靜態(tài)變量)             編譯看左,運行看左邊  (看父類)
2)構(gòu)造方法
Fu f = new Zi() ;  內(nèi)存創(chuàng)建的是子類對象,但是存在繼承關(guān)系,執(zhí)行構(gòu)造方法先讓父類初始化完畢,然后在初始化子類
3)成員方法(非靜態(tài))  (方法重寫,說的非靜態(tài)的方法!)           編譯看左,運行看右   (因為存在方法重寫,運行看的右邊)
4)靜態(tài)的成員方法:            編譯看左,運行看左(靜態(tài)方法算不上方法重寫,跟類先關(guān),優(yōu)先父類進(jìn)行數(shù)據(jù)初始化,function方法先進(jìn)內(nèi)存)
父類引用.靜態(tài)方法名()--調(diào)用父類的方法

多態(tài)的弊端:
父類引用指向子類對象(向上轉(zhuǎn)型),無法訪問

1)直接在測試的時候,子類去創(chuàng)建自己的對象           Son s = new Son()

可以訪問,但是從內(nèi)存角度考慮,重新在堆內(nèi)存中開辟空間,耗費空間的內(nèi)存! 
2)如果能夠類似于這種方式:父類引用指向子類對象,訪問的是父類,如果能夠?qū)⒏割惖囊棉D(zhuǎn)換為子類引用           是可以的,
將父類的引用強(qiáng)制轉(zhuǎn)換為子類的引用 :向下轉(zhuǎn)型      

Zi zi = (Zi)f;子類的特有功能!

需要訪問子類特有功能,怎么辦?

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI