1. 程式人生 > >java面向對象三大特性:封裝、繼承、多態

java面向對象三大特性:封裝、繼承、多態

傳遞 大於 精確 沒有 left 返回值 數據 public 對象引用

一、封裝

封裝也稱信息隱藏,是指利用抽象數據類型把數據和基於數據的操作封裝起來,使其成為一個不可分割的整體,數據隱藏在抽象數據內部,盡可能的隱藏數據細節,只保留一些接口使其與外界發生聯系。也就是說用戶無需知道內部的數據和方法的具體實現細節,只需根據留在外部的接口進行操作就行。

封裝的好處:

1) 實現了專業的分工

2) 良好的封裝能夠減少耦合

3) 類內部的結構能夠自由修改

4) 可以對成員進行更精確的控制

5) 隱藏信息,實現細節

二、繼承

Java繼承是面向對象的最顯著的一個特征。繼承是從已有的類中派生出新的類,新的類能吸收已有類的數據屬性和行為,並能擴展新的能力。JAVA不支持多繼承,單繼承使JAVA的繼承關系很簡單,一個類只能有一個父類,易於管理程序,父類是子類的一般化,子類是父類的特殊化(具體化)

繼承的聲明方式:

1)、使用extends 關鍵字聲明,

2)、子類 extends 父類{}

繼承的特征:

1)、傳遞性

若類C繼承類B,類B繼承類A(多繼承),則類C既有從類B那裏繼承下來的屬性與方法,也有從類A那裏繼承下來的屬性與方法,還可以有自己新定義的屬性和方法。繼承來的屬性和方法盡管是隱式的,但仍是類C的屬性和方法

2)、單根性

若類B繼承類A,那麽建立類B時只需要再描述與基類(類A)不同的少量特征(數據成員和成員方法)即可。這種做法能減小代碼和數據的冗余度,大大增加程序的重用性。

3)、子類調用父類成員

使用super關鍵字調用父類成員

子類默認會先調用父類的無參構造方法,如果父沒有則報錯,可以手動指定,但必須在第一行

設計繼承關系的驗證方法:

如果想要知道某物是否應該要繼承另一物是,則可以使用IS-A測試來檢驗。例如:狗是動物,三角形是一個多邊形等。

註意:

1)、繼承下來的方法可以被覆蓋掉,但是實例變量不能被覆蓋掉。

2)、當某個方法在子類中被覆蓋過,調用這個方法時會調用到覆蓋過的版本。

三、多態

在了解多態之前,首先需要知道方法的唯一性標識即什麽是相同/不同的方法:

  • 一個方法可以由:修飾符如public、static+返回值+方法名+參數+throw的異常 5部分構成
  • 其中只有方法名和參數是唯一性標識,意即只要方法名和參數相同那他們就是相同的方法
  • 所謂參數相同,是指參數的個數,類型,順序一致,其中任何一項不同都是不同的方法

何謂重載:

  • 重載是指一個類裏面(包括父類的方法)存在方法名相同,但是參數不一樣的方法,參數不一樣可以是不同的參數個數、類型或順序
  • 如果僅僅是修飾符、返回值、throw的異常 不同,那這是2個相同的方法,編譯都通不過,更不要說重載了

何謂覆蓋/重寫:

  • 覆蓋描述存在繼承關系時子類的一種行為
  • 子類中存在和父類相同的方法即為覆蓋,何謂相同方法請牢記前面的描述,方法名和參數相同,包括參數個數、類型、順序

覆蓋/重寫的規則:

  • 子類不能覆蓋父類private的方法,private對子類不可見,如果子類定義了一個和父類private方法相同的方法,實為新增方法
  • 重寫方法的修飾符一定要大於被重寫方法的修飾符(public > protected > default > private)
  • 重寫拋出的異常需與父類相同或是父類異常的子類,或者重寫方法幹脆不寫throws
  • 重寫方法的返回值必須與被重寫方法一致,否則編譯報錯
  • 靜態方法不能被重寫為非靜態方法,否則編譯出錯

理解了上述知識點,是時候定義多態了:

  • 多態可以說是“一個接口,多種實現”或者說是父類的引用變量可以指向子類的實例,被引用對象的類型決定調用誰的方法,但這個方法必須在父類中定義
  • 多態可以分為兩種類型:編譯時多態(方法的重載)和運行時多態(繼承時方法的重寫),編譯時多態很好理解,後述內容針對運行時多態
  • 運行時多態依賴於繼承、重寫和向上轉型

向上轉型的缺憾:

  • 只能調用父類中定義的屬性和方法,對於子類中的方法和屬性它就望塵莫及了,必須強轉成子類類型

總結概括:

  • 當超類對象引用變量引用子類對象時,被引用對象的類型而不是引用變量的類型決定了調用誰的成員方法,但是這個被調用的方法必須是在超類中定義過的,也就是說被子類覆蓋的方法,但是它仍然要根據繼承鏈中方法調用的優先級來確認方法,該優先級為:this.show(O)、super.show(O)、this.show((super)O)、super.show((super)O)

java面向對象三大特性:封裝、繼承、多態