面向?qū)ο?oop)結(jié)束篇(1)

繼承

1. 繼承的基礎(chǔ)語法

在程序設(shè)計(jì)中,如果有多個(gè)具有邏輯關(guān)聯(lián)的類,具有相同的特性和行為(屬性和方法)。那么我們可以將這些相同的部分提取出來,做成另外的一個(gè)類。

被提取出來的類,稱作是 -- 父類,基類,超類

那些被提取共同點(diǎn),具有邏輯關(guān)聯(lián)的類,被稱作 -- 子類,派生類

他們之間的關(guān)系,叫做 -- 繼承

// Dog類繼承自Animal類
// Animal是父類
// Dog是子類
class Dog extends Animal {}
2. 繼承的基本特點(diǎn)

1、子類可以訪問父類中能看得到的所有成員。

這里的所謂的“能看得到的”,指的是訪問權(quán)限修飾符的限定。

2、Java語言是單繼承的。一個(gè)類只能有一個(gè)父類、但是一個(gè)類可以有多個(gè)子類。

多繼承容易出現(xiàn)“二義性”的問題,所以很多語言都摒棄掉多繼承。但是會(huì)通過其他的方式間接的實(shí)現(xiàn)多繼承

例如:在Java中,通過“接口”來間接實(shí)現(xiàn)多繼承。

3、構(gòu)造方法不能被繼承。

什么情況下使用繼承

如果一個(gè)類提供的功能已經(jīng)不能滿足我們的需求,此時(shí)可以考慮使用繼承來為這個(gè)類添加功能。

3. 繼承中的構(gòu)造方法

1、構(gòu)造方法是不能被繼承的

2、一個(gè)對(duì)象在堆上開辟的空間,其實(shí)可以分為兩大部分:父類繼承成員 和 子類特有成員

一個(gè)對(duì)象在進(jìn)行實(shí)例化的時(shí)候,先實(shí)例化從父類繼承到的部分,再實(shí)例化子類特有的部分

實(shí)例化父類部分的時(shí)候,需要調(diào)用父類中的構(gòu)造方法,默認(rèn)調(diào)用父類中的無參構(gòu)造

3、如果父類中沒有無參構(gòu)造方法,則子類對(duì)象將不能正常的實(shí)例化

1、給父類添加一個(gè)無參構(gòu)造

2、在子類的構(gòu)造方法中,手動(dòng)調(diào)用父類中存在的構(gòu)造方法

? super()

4. 訪問權(quán)限修飾符

用來修飾屬性、方法、類的一些修飾符,使被修飾的部分具有一定的訪問權(quán)限。

訪問權(quán)限:屬性、方法、類可以在哪些范圍被訪問。

訪問權(quán)限 修飾符 可以修飾
公開權(quán)限 public 類、方法、屬性
保護(hù)權(quán)限 protected 方法、屬性
包權(quán)限 類、方法、屬性
私有權(quán)限 private 方法、屬性
訪問權(quán)限 當(dāng)前類 同包 跨包子類 跨包不同類
public
protected ×
default/package × ×
private × × ×

訪問權(quán)限大小關(guān)系: public > protected > default > private

5. 方法的重寫 Override

是繼承中最重要的部分。也是多態(tài)的基礎(chǔ)。

重寫,就是在子類中,對(duì)從父類繼承到的方法進(jìn)行重新實(shí)現(xiàn)。

重寫,又叫做覆寫,用子類的實(shí)現(xiàn)覆蓋掉父類的實(shí)現(xiàn)。

重寫中需要注意的問題:

@Override

這是一個(gè)注解,附著在修飾的地方,可以做一些簡(jiǎn)單的邏輯。

用來修飾一個(gè)方法,作用是對(duì)這個(gè)方法做一個(gè)重寫的驗(yàn)證,驗(yàn)證這個(gè)方法是不是一個(gè)重寫的方法。

在進(jìn)行方法重寫的時(shí)候,@Override不是一個(gè)必須要添加的注解,但是實(shí)際開發(fā)中,我們一般都是會(huì)加上的。

重寫對(duì)方法的返回值、訪問權(quán)限的要求

1、對(duì)訪問權(quán)限的要求:子類方法的訪問權(quán)限要大于等于父類方法的訪問權(quán)限。

2、對(duì)返回值的要求:子類方法的返回值類型可以和父類方法保持一致,也可以是父類方法返回值類型的子類型。

3、重寫對(duì)方法的異常拋出類型也有要求,這個(gè)要求,后面在異常中講。

6. final關(guān)鍵字

final 關(guān)鍵字可以用來修飾什么?分別具有什么樣的意義?

1、修飾變量,表示值不可以改變,是一個(gè)常量

2、修飾類,表示這個(gè)類是一個(gè)最終類,無法被繼承

3、修飾方法,表示是一個(gè)最終方法,不能被重寫

7. Object類

Object類是Java中所有的類的根類。所有的類都直接或者間接的繼承自O(shè)bject。

這個(gè)類中定義了很多的每一個(gè)類都能使用到的方法。

  • toString()
    • 返回一個(gè)當(dāng)前對(duì)象的字符串表示形式。
    • 如果需要將一個(gè)對(duì)象轉(zhuǎn)成字符串類型,會(huì)默認(rèn)的調(diào)用這個(gè)方法。
  • hashCode()
    • 返回的是一個(gè)對(duì)象的地址哈希碼
    • 如果在一個(gè)散列序列中,這個(gè)方法的作用非常大
    • 如果沒有在一個(gè)散列序列中,這個(gè)方法基本無用
    • HashSet、HashMap。。。
  • equals(Object other)
    • 自定義的兩個(gè)對(duì)象的比較規(guī)則
    • 理論上來講,可以任意的制定規(guī)則,但是規(guī)則制定,一般需要遵循一定的規(guī)范
      • 如果other是null,則返回一定是false
      • 如果this == other,則返回一定是true
      • 如果this和other的類型不同,則返回一定是false
      • 如果a.equals(b) == true,那么b.equals(a)結(jié)果也一定是true
      • 如果a.equals(b) == ture, b.equals(c) == true,則 a.equals(c) 也一定要是true
    • 引用數(shù)據(jù)類型的比較,一般情況下都是通過equals進(jìn)行比較的
  • getClass()
    • 獲取一個(gè)對(duì)象的類型
8. super關(guān)鍵字

和this是比較像的。

this: 對(duì)當(dāng)前對(duì)象的引用。

super: 對(duì)父類對(duì)象的引用。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容