日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

Java面向对象(二)面向对象的特征 --- 封装 、 继承、 多态

發(fā)布時間:2024/4/30 java 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java面向对象(二)面向对象的特征 --- 封装 、 继承、 多态 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

面向?qū)ο蟮奶卣?#xff1a;封裝、繼承、多態(tài)、(抽象)

一、封裝

體現(xiàn)形式:

函數(shù) --- 提高代碼的復(fù)用性。

屬性的私有化 --- 將屬性設(shè)為私有,通過提供對外的訪問方法來間接操作對象屬性,可以再方法內(nèi)對屬性做一系列的限制使其符合要求 ---- 提高代碼的安全性。

擴充: 權(quán)限修飾符

public ?:本類、子類、同包類、其他類。

protected : 本類、子類、同包類。

default : 本類、同包類、同包子類

private : 本類

二、繼承

對一些類的屬性和方法進行提取,提取出來一個新的類。通過extends關(guān)鍵字使新的類 與舊類產(chǎn)生繼承關(guān)系。新類稱之為父類、超類、基類,而舊的類稱之為子類、派生類

注意:

java中只支持單繼承 --- 一個子類只能有一個父類 ,而一個父類可以有多個子類。

優(yōu)點:

1. 提高代碼安全性。

2. 提高代碼復(fù)用性。

3.?統(tǒng)一代碼結(jié)構(gòu)。

super關(guān)鍵字:

在創(chuàng)建子類對象時,會先創(chuàng)建一個父類對象,而這個父類對象在子類中以super關(guān)鍵字的形式存在。

super是父類對象的引用,可以認(rèn)為是父類產(chǎn)生的一個虛擬對象。

如果一個構(gòu)造函數(shù)中已經(jīng)存在了this關(guān)鍵字,那么此時不能再寫super語句。

super()語句必須放在首行。

調(diào)用super()語句時會自動匹配父類中對應(yīng)形式的構(gòu)造函數(shù)。

問:

1. 子類的每個構(gòu)造函數(shù)都間接或直接的有一個super語句?

解: 正確。

子類繼承父類后,子類的構(gòu)造函數(shù)再編譯時JVM會默認(rèn)添加(隱式定義)一個無參的super()語句。 ?--- 直接

在子類的某個構(gòu)造函數(shù)中用this語句調(diào)用另一個構(gòu)造函數(shù),此時不能直接再寫super語句。但是this()語句調(diào)用的構(gòu)造函數(shù)中會有默認(rèn)的(隱式定義的)super()語句或顯示定義的super(args[])語句 --- 間接

2. 如果父類中只提供了含參構(gòu)造,子類的構(gòu)造函數(shù)還能使用默認(rèn)的super語句么?

解 : 不能。

每一個類都有構(gòu)造函數(shù)。當(dāng)用戶沒有定義構(gòu)造函數(shù)時,JVM會自動添加一個無參構(gòu)造,當(dāng)用戶定義了有參構(gòu)造后,JVM將不在提供無參構(gòu)造。

在創(chuàng)建子類對象時會先 創(chuàng)建父類對象,super關(guān)鍵字是對父類對象的引用,而默認(rèn)的super()語句實際是調(diào)用父類的無參構(gòu)造,所以當(dāng)父類定義有參構(gòu)造后,子類將不能繼續(xù)使用默認(rèn)的super()語句,而是由用戶調(diào)用super(args[])

3. 可以通過this來調(diào)用父類中的屬性或方法么?

解: 可以

子類使用this關(guān)鍵字調(diào)用屬性或方法的時候,會先檢查當(dāng)前類中是否有對應(yīng)的屬性,如果沒有則在檢查父類。

重寫:

在父子類 中,如果存在類方法簽名一致的方法,則成為函數(shù)的重寫|覆蓋 ? ? (方法簽名 : 方法名+參數(shù)列表)

注意:

重寫必須遵守五個原則:兩等兩小一大

1. 方法簽名一致

2. 當(dāng)父類中的方法返回值類型是基本數(shù)據(jù)類型、void、最終類,子類重寫方法的返回值類型必須一致。

3. 當(dāng)父類中方法返回值類型是引用數(shù)據(jù)類型的時候,子類方法的返回值類型要么和父類一致,要么子類方法返回值類型是父類方法返回值類型的子類。

4. 當(dāng)父類中拋出異常聲明時,子類拋出的異常聲明必須是父類拋出異常聲明的子類。

5. 子類方法的權(quán)限修飾符應(yīng)該 大于 或等于父類方法的權(quán)限修飾符。

三、多態(tài)

  • 多態(tài)是java面向?qū)ο蟮娜筇卣髦?, 也是最重要的特征 。?
  • 多態(tài): 同一事務(wù)的多種形態(tài) 或狀態(tài) 。
  • java程序執(zhí)行可以分為編譯期和運行期 , 根據(jù)多態(tài)出現(xiàn)的不同時期可分為:?
  • ?編譯時多態(tài)(編譯時期發(fā)生) --- 重載
  • 運行時多態(tài) (運行時期才動態(tài)綁定具體執(zhí)行的代碼)--- ?向上造型、重寫 ? ---- 繼承時運行時多態(tài)的前提。 ? ? ?(向上造型 ?: 父類 ?對象名 = new 子類();)
  • 重載 : 重載特點-- 在同一類中,函數(shù)名相同 , 參數(shù)列表不同 。 根據(jù)重載的特點 , ?我們可以通過調(diào)用同一函數(shù)名 ,執(zhí)行不同的邏輯 ?---- 編譯是多態(tài)
  • 向上造型 : 父類聲明 , 子類創(chuàng)建實例 。 ?在編譯時 , ?JVM只檢查聲明類和具體實現(xiàn)類是否有繼承關(guān)系 , 而不去關(guān)心具體是那個子類 , 在編譯期也不會具體綁定實現(xiàn)類, 而是直到運行時才確定具體執(zhí)行哪個子類中的方法 ?, 這種多態(tài)稱為運行時多態(tài) 。?
  • 重寫:重寫時體現(xiàn)的運行時多態(tài)是在向上造型的基礎(chǔ)上的 ?,向上造型時 , 通過父類聲明的對象調(diào)用方法 , 調(diào)用時只關(guān)心父類有沒有這個方法 ,而不關(guān)心執(zhí)行時執(zhí)行父類還是子類的方法 ?。 在執(zhí)行時才會檢查子類 , 如果子類重寫了這個方法 , ?則執(zhí)行子類的方法 , 如果沒有,則執(zhí)行父類中的方法 ?--- 運行時多態(tài) 。?

  • 注意:

    使用向上造型創(chuàng)建對象的時候,用父類聲明,用子類創(chuàng)建;父類再聲明時就相當(dāng)于k==geile這個對象一份提綱;子類創(chuàng)建對象時是告訴這個對象該怎么干 ---- 能不能用看父類,具體實現(xiàn)看子類。

    重寫的理解:

    1. 方法簽名一致

    解釋: 重寫的概念。

    2. 當(dāng)父類中的方法返回值類型是基本數(shù)據(jù)類型、void、最終類,子類重寫方法的返回值類型必須一致。

    解釋: 向上造型 時,需要使用父類對象的方法接受子類重寫后方法的返回值,如果是引用數(shù)據(jù)類型,則可以使用父類接受子類,此時要求父類中方法的返回值類型等于或者是子類方法返回值類型的父類;如果是基本數(shù)據(jù)類型,由于八種基本數(shù)據(jù)類型是相互平等的,不存在繼承關(guān)系,所以返回值類型要求一致。

    3. 當(dāng)父類中方法返回值類型是引用數(shù)據(jù)類型的時候,子類方法的返回值類型要么和父類一致,要么子類方法返回值類型是父類方法返回值類型的子類。

    解釋: 向上造型 時,需要使用父類對象的方法接受子類重寫后方法的返回值,如果是引用數(shù)據(jù)類型,則可以使用父類接受子類,此時要求父類中方法的返回值類型等于或者是子類方法返回值類型的父類;如果是基本數(shù)據(jù)類型,由于八種基本數(shù)據(jù)類型是相互平等的,不存在繼承關(guān)系,所以返回值類型要求一致。


    4. 當(dāng)父類中拋出異常聲明時,子類拋出的異常聲明必須是父類拋出異常聲明的子類。

    解釋:向上造型時,父類中拋出的異常聲明必須要能接住子類拋出的異常聲明,所以要求父類中拋出的異常聲明是子類中拋出的異常聲明的父類。

    5. 子類方法的權(quán)限修飾符應(yīng)該 大于 或等于父類方法的權(quán)限修飾符。

    解釋: 向上造型時,調(diào)用方法看父類,具體執(zhí)行看子類,所以要求父類中方法能執(zhí)行的地方子類中方法也要能執(zhí)行,所以子類中權(quán)限修飾符的范圍必須大于或等于父類中方法的權(quán)限修飾符。

    多態(tài)的產(chǎn)生就是為了解耦.




    總結(jié)

    以上是生活随笔為你收集整理的Java面向对象(二)面向对象的特征 --- 封装 、 继承、 多态的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。