Java三大特徵:封裝、繼承、多態

來源:互聯網
上載者:User

java中的封裝

     封裝,一個對象和外界的聯絡應當通過一個統一的介面,應當公開的公開,應當隱藏的隱藏。(對象的屬性應當隱藏),一個對象的內部是透明的,就是把對象內部的可透明性和隱藏的特性區分開,該透明的透明,該隱藏的隱藏。

    (封裝的屬性)java中類的屬性的存取權限的預設值不是private,要想隱藏該屬性或方法,就可以加private(私人)修飾符,來限制只能夠在類的內部進行訪問。

     對於類中的私人屬性,要對其給出一對方法(getXxx(),setXxx())訪問私人屬性,保證對私人屬性的操作的安全性。

     方法的封裝,對於方法的封裝,該公開的公開,該隱藏的隱藏。方法公開的是方法的聲明(定義),即(只須知道參數和傳回值就可以調用該方法),隱藏方法的實現會使實現的改變對架構的影響最小化。。

     封裝會使方法實現的改變對架構的影響最小化。

     完全的封裝,類的屬性全部私人化,並且提供一對方法來訪問屬性。

java中的繼承

     繼承,是對有著共同特性的多類事物,進行再抽象成一個類。這個類就是多類事物的父類。父類的意義在於可以抽取多類事物的共性。

     java中的繼承要使用extends關鍵字,並且java中只允許單繼承,也就是一個類只能有一個父類。
     這樣就是繼承關係呈樹狀,體現了java的簡單性。

     子類只能繼承在父類中可以訪問的屬性和方法(實際上父類中私人的屬性和方法也會被繼承但子類中無法訪問罷了)。

     存取控制修飾符:(可以修飾屬性和方法)
     private修飾符,表示只有本類內部可以訪問。
     default修飾符,方法不加修飾符,會預設為default,表示在同一個包中可以訪問,父子類在同一包中,子類可以繼承父類的相應內容。(可以修飾類)
     protected(保護)修飾符,表示同一包中可以訪問,不同包的子類也可以訪問繼承。
     public修飾符,表示公開,在任何地方都可以訪問。(可以修飾類)
     修飾符的許可權是由上而下逐漸層寬的。

     繼承的意義,就在於子類可以在父類的基礎之上對父類的功能進行發展,繼承可以使系統的耦合性降低,也就是使對象間的聯絡便的鬆散,使多類對象間的聯絡用其父類對象代替。

     注意:構造方法不能被繼承。

     父類的屬性及方法的確定:要從子類的角度來看子類間的共性,當所有子類都有這個屬性時,就應當考慮是否該放在父類中,方法也是如此,方法可以被看作是對象的行為,而類的方法這時這一類對象所共有的行為,所以也應當在方法的確定時注意是不是所有的子類型中都需要有這種方法,並且會根據不同的類型的行為的方式也不同才可以覆蓋著個方法。

     java中方法的覆蓋

     子類中有和父類中可訪問(可繼承到子類)的同名同傳回型別同參數表的方法,就會覆蓋從父類繼承來的方法。

     注意:在jdk1.4以前要求方法的覆蓋時,需要方法的傳回值,參數表,方法名必須嚴格相同,而在jdk1.5中方法覆蓋,子類的中覆蓋的方法的傳回值可以是父類中被覆蓋的方法的傳回值類型的子類型。

     注意:子類的方法覆蓋父類的方法時,方法的修飾符要麼相同,要麼子類中的方法的修飾符表示的存取權限要寬於父類。父類中的私人方法,不能被繼承到子類,就是說子類中即使將其覆蓋了也不會有多態。

     覆蓋的意義:對從父類中繼承的方法的發展。

     注意:父子類中有同名的屬性不叫子類覆蓋了父類的屬性,這種情況較作屬性的遮蓋(shadow)。

     當構造有繼承關係的對象的步驟
     1,遞迴的構造父類的對象
     2,分配空間
     3,初始化本類執行個體變數(屬性)
     4,調用本類的構造方法

     注意:子類對象中其實包含著父類的對象,也就是父類對象加上子類對象,才是完整的子類對象的執行個體。
     super關鍵字
     super(),表示在子類的構造方法中調用父類的構造方法(可以通過這種方法在子類的構造方法中初始化父類中的屬性),super()也只能出現在構造方法的第一句上。super(),在子類的構造方中指明構造父類時調用哪一個父類的構造方法構造父類。
     super,這裡所表示的是一個父類的對象,可以通過super來使用父類中可以訪問的方法(可以在父類中定義setXxx(),getXxx()方法來訪問父類中的私人屬性),super可以屏蔽父子類中同名屬性的衝突。
     注意:在寫類的時候,一定要寫預設無參的構造方法,如果一個構造方法的第一句既不是this(),也不是super()時,那麼就會在這裡隱含的調用他的父類的無參的構造方法,即隱含的有super()。

     少覆蓋原則:既子類應當盡量少的覆蓋父類方法,如果覆蓋了父類的大多數方法,那就應當考慮是否應當有繼承關係

java中的多態(以子類覆蓋了父類的方法為前提)

     多態,把子類對象主觀的看作是其父類型的對象,那麼父類型就可以是很多種類型。

    

     多態:

     編譯時間多態(方法的重載)

     運行時多態(多態)


     編譯時間類型,也就是可以被看作的類型,主觀認定。
     運行時類型,也就是實際的對象執行個體的類型,客觀不可改變(也是被看作類型的子類型)

     對於一個對象來說,在對象產生時,運行時類型就已經確定不會再改變,編譯時間類型可以和運行時類型不同。在物件變數聲明時可以確定其運行時類型,但是編譯時間類型物件變數背後所指向運行時類型則可以是其本類型或者是其子類型。

     多態三特性
     1,對象執行個體確定則不可改變(客觀不可改變)
     2,只能調用編譯時間類型所定義的方法。
     3,運行時會根據運行時類型去調用相應類型中定義的方法。

     多態的意義:在需要使用一類對象的共性時,可以用多來屏蔽掉其子類中的差異。

     注意:類的屬性是沒有多態的,只會根據編譯時間類型訪問。只有子類覆蓋了父類的方法,且把子類對象黨作父類類型來看時才會有多態。要注意區分子類中的方法重載。對於方法的重載,則是會使用編譯時間類型來進行相應的方法調用。

     兩種複用
     白箱複用,也就是繼承複用,父類中的可以被子類訪問到的就可以被繼承,這樣會有些不需要的內容被繼承下來,所以這種方式不太好。
     黑箱複用,也叫組合複用,也就是把要複用代碼的類的對象作為本類中的一個屬性,然後再通過方法的委託來實現由選擇的複用,方法的委託就是在本類的方法內部通過該類的對象調用要使用類的方法。

     注意:盡量用組合複用替代繼承複用。

     多態的使用

     多態用於參數,可以在方法的參數中傳入其父類類型,在運行時會根據實際的運行時類型來在方法中進行相應的操作。
     多態用於傳回值,可以在方法的傳回值類型上是用其實際傳回值的父類型,在使用期傳回值時也不比關心其實際類型。

     多態可以使代碼變得更通用,以適應需求的變化。也就是定義在父類中的方法,可以在子類中有不同的實現將其覆蓋,在為父類型的物件變數賦值相應需要功能的子類的對象執行個體。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.