Java基礎:封裝 繼承 多態

面向對象的三個基本特徵是:封裝、繼承、多態。

我們知道,封裝可以隱藏實現細節,使得代碼模塊化;繼承可以擴展已存在的代碼模塊(類);它們的目的都是:代碼重用。而多態則是爲了實現另一個目的——接口重用!多態的作用,就是爲了類在繼承和派生的時候,保證使用“家譜”中任一類的實例的某一屬性時的正確調用。

封裝:

 封裝是實現面向對象程序設計的第一步,封裝就是將數據或函數等集合在一個個的單元中(我們稱之爲類)。被封裝的對象通常被稱爲抽象數據類型。 

 封裝的意義:
  封裝的意義在於保護或者防止代碼(數據)被我們無意中破壞。在面向對象程序設計中數據被看作是一箇中心的元素並且和使用它的函數結合的很密切,從而保護它不被其它的函數意外的修改。

  1. 保護數據成員,不讓類以外的程序直接訪問或修改,只能通過提供的公共的接口訪問==>數據封裝。
  2. 方法的細節對用戶是隱藏的,只要接口不變,內容的修改不會影響到外部的調用者==>方法封裝。 
  3. 當對象含有完整的屬性和與之對應的方法時稱爲封裝。
  4. 從對象外面不能直接訪問對象的屬性,只能通過和該屬性對應的方法訪問。
  5. 對象的方法可以接收對象外面的消息。

類成員的訪問修飾符:

即類的方法和成員變量的訪問控制符,一個類作爲整體對象不可見,並不代表他的所有域和方法也對程序其他部分不可見,需要有他們的訪問修飾符判斷。

權限 類內 同包 不同包子類 不同包非子類
private × × ×
default × ×
protected ×
public

繼承:

繼承主要實現重用代碼,節省開發時間。

繼承可以解決代碼複用問題,讓我們編程更加靠近人類的思維,當多個類存在相同的屬性(變量)和方法時,可以從這些類中抽象出父類(比如剛纔的Student),在父類中定義這些相同的屬性和方法,所有的子類不需要重新定義這些屬性和方法,只需要通過extend語句來聲明繼承 父類:

class 子類 extends 父類

這樣,子類就會自動擁有父類定義的屬性和方法。

繼承注意事項:

  • 子類最多繼承一個父類
  • java多有類都是Object類的子類

方法重載:

簡單地說:方法重載就是類的同一種功能的多種實現方式,到底採用哪種方式,取決於調用者給出的參數。

方法重載-注意事項

  • 方法名相同
  • 方法的參數類型、個數、順序至少有一項不同
  • 僅僅是返回類型不一樣,是不能構成重載的
  • 方法修飾符可以不同
  • 如果只是控制訪問符不同,不能構成重載

方法覆蓋:

將父類的方法進行重新寫。方法的覆蓋就是子類有一個方法,和父類的某個方法的名稱、返回類型、參數一樣,那麼我們就說子類的這個方法覆蓋了父類的那個方法,比如上個案例的Cat類中的cry方法就覆蓋了Animal類的cry方法。

方法覆蓋的注意事項:

  • 子類的方法的返回類型,參數,方法名稱,要和父類方法的返回類型,參數,方法名稱完全一樣,否則編譯出錯。
  • 子類方法不能縮小父類方法的訪問權限。假設父類方法時public,但是你的子類方法改成了protected,這樣就會出現報錯

多態:

1、“一個接口,多種方法”

所謂多態,就是指一個引用(類型)在不同情況下的多種狀態,你也可以這樣理解:多態是指通過指向父類的指針,來調用在不同子類中實現的方法。同一操作作用於不同的對象,可以有不同的解釋,產生不同的執行結果。

  多態的三個條件:

  • 繼承的存在(繼承是多態的基礎,沒有繼承就沒有多態).
  • 子類重寫父類的方法(多態下調用子類重寫的方法).
  • 父類引用變量指向子類對象(子類到父類的類型轉換).

重載(overload)和重寫(override)是實現多態的兩種主要方式。

2、實現多態:

  • 接口多態性。
  • 繼承多態性。
  • 通過抽象類實現的多態性。
     
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章