Java面向對象09-特性

在這裏插入圖片描述

Java語言特點

什麼是面向對象

對象是事物存在的實體,如,豬、狗,花早等都是對象,對象由兩部分組成。面向對象編程的三大特點:繼承,多態,類是封裝對象的屬性和行爲的載體,反過來說具有相同屬性和行爲的一類實體被稱爲類。

面向對象思想就是不斷的創建對象(屬性與行爲的封裝,讓二者作爲整體參與程序執行),使用對象,指揮對象做事情。(在已有對象的情況下,直接使用對象,而不再去考慮對象的內部構造)

面向對象的開發來講也分爲三個過程:OOA(面向對象分析)、OOD(面向對象設計)、OOP(面向對象編程)

面向對象與面向過程比較

面向過程:
面向過程,核心是過程二字。過程即解決問題的步驟,設計一條流水線,機械式的思維方式。它考慮的是實際地實現,針對一個特定的問題去思考其解決步驟。學過C語言的同學就知道,用C語言編程,我們需要去解析題意,分析目的,畫出流程圖,按着步驟實現。這就是一種面向過程的思考方式。一般的面向過程是從上往下步步求精,所以面向過程最重要的是模塊化的思想方法。因此在模塊化編程的時候纔會有“低耦合,高內聚”的思想來提高效率。

面向對象:
面向對象離不開面向過程,我們可以把面向過程當做面向對象每一部分的實現。就比如造車,面向對象就是思考車這個對象是由什麼組成的,而每一個零件的製作就是一個個過程要經過一道道工序才能做出來。因此,面向對象可以幫助我們從宏觀上把握、從整體上分析整個系統。 但是,具體到實現部分的微觀操作(就是一個個方法),仍然需要面向過程的思路去處理。

兩種思想的對比
面向對象是具體化的、流程化的。解決一個問題,需要一步一步分析需要怎樣,然後需要怎樣,一步一步實現的。面向對象是模型化的,抽象出一個類,這是一個封閉的環境,在這個環境中有數據、有解決問題的方法,你如果需要什麼功能直接使用就可以了,至於是怎麼實現的,你不用知道。

面向對象怎麼體現

(1)通過類:類是封裝對象的屬性和行爲的載體,反過來說具有相同屬性和行爲的一類實體被稱爲類。

(2)封裝:是面向對象編程的核心思想,將對象的屬性和行爲封裝起來,而將對象的屬性和行爲封裝起來的載體就是類,類通常對客戶隱藏其實現細節,這就是封裝的思想,用戶只能通過對外提供的接口訪問數據。

(3)多態:是指允許不同類的對象對同一消息做出響應,根據對象創建實例的不同調用不同的方法,本質是編譯時和運行時才決定對象的行爲。

這裏分爲兩個知識點:靜態分派,方法的重載,編譯時決定

動態分派,方法重寫,運行時決定。

多態的特點:可替換性,靈活性,擴展性,統一編碼風格。

(4)繼承:繼承是指從已有的類中派生新的類,新的類能夠吸收已有類的數據屬性和行爲,並能夠擴展新的功能。

特點:可擴展性,代碼複用。

封裝

所謂封裝,也就是把客觀事物封裝成抽象的類,並且類可以把自己的數據和方法只讓可信的類或者對象操作,對不可信的進行信息隱藏。 舉個例子,封裝就好比是一臺電視,廠家把電視的電路板、電線、信號接收器等封裝在外殼裏,只有相關技術人員才能打開電視機外殼,對其中的東西進行訪問,而我們只需要通過開關、遙控器就可以實現電視機的功能。

這也就是程序設計所要求的高內聚、低耦合。高內聚就是類的內部數據操作細節自己完成,不允許外部干涉;低耦合是僅暴露少量的方法給外部使用,儘量方便外部調用。 通過這種方式,對象對內部數據提供了不同級別的保護,以防止程序中無關的部分意外的改變或錯誤的使用了對象的私有部分。

封裝的實現—使用訪問控制符:

Java是使用“訪問控制符”來控制哪些細節需要封裝,哪些細節需要暴露的。 Java中4種“訪問控制符”分別爲public、protected、default、private,它們說明了面向對象的封裝性,所以我們要利用它們儘可能的讓訪問權限降到最低,從而提高安全性。

下面詳細講述它們的訪問權限問題。

修飾符 同一個類中 同一個包中 子類 所有類
public √ √ √ √
protected √ √ √ ×
default √ √ × ×
private √ × × ×
1.public表示可以被該項目的所有包中的所有類訪問

2.protected表示可以被同一個包的類以及其他包中的子類訪問

3.default表示沒有修飾符修飾,只有同一個包的類能訪問

4.private 表示私有,只有自己類能訪問

繼承

多個類有共同的成員變量和成員方法,抽取到另外一個類中(父類),在讓多個類去繼承這個父類

特點:

1.子類繼承父類的成員變量

當子類繼承了某個類之後,便可以使用父類中的成員變量,但是並不是完全繼承父類的所有成員變量。具體的原則如下:

1)能夠訪問父類的public和protected成員變量;不能夠訪問父類的private成員變量(可以通過反射強制獲取);

2)對於父類的包訪問權限成員變量,如果子類和父類在同一個包下,則子類能夠繼承;否則,子類不能夠繼承;

3)對於子類可以繼承的父類成員變量,如果在子類中出現了同名稱的成員變量,則會發生隱藏現象,即子類的成員變量會屏蔽掉父類的同名成員變量。如果要在子類中訪問父類中同名成員變量,需要使用super關鍵字來進行引用。

2.子類繼承父類的方法

1)能夠訪問父類的public和protected成員方法;不能夠訪問父類的private成員方法(但是能繼承);

2)對於父類的包訪問權限成員方法,如果子類和父類在同一個包下,則子類能夠繼承;否則,子類不能夠繼承;

3)對於子類可以繼承的父類成員方法,如果在子類中出現了同名稱的成員方法,則稱爲覆蓋,即子類的成員方法會覆蓋掉父類的同名成員方法(但是父類的成員方法如果是靜態,子類也必須是靜態才能屏蔽,不然編譯錯誤,反之亦然)。如果要在子類中訪問父類中同名成員方法,需要使用super關鍵字來進行引用。

注意:隱藏和覆蓋是不同的。隱藏是針對成員變量和靜態方法的,而覆蓋是針對普通方法的。

多態

多態是同一個行爲具有多個不同表現形式或形態的能力。

多態就是同一個接口,使用不同的實例而執行不同操作。

多態的要點:

  1. 多態是方法的多態,不是屬性(變量)的多態(多態與屬性無關)。

  2. 多態的存在要有3個必要條件:繼承,方法重寫,父類引用指向子類對象。

  3. 父類引用指向子類對象後,用該父類引用調用子類重寫的方法,此時多態就出現了。

**總結:**所謂封裝,就是通過定義類並且給類的屬性和方法加上訪問控制來抽象事物的本質特性。所謂繼承,就是代碼重用,而多態,就是一個行爲(方法)在不同對象上的多種表現形式。

接口和抽象類

抽象類:在面向對象的概念中,所有的對象都是通過類來描繪的,但是反過來,並不是所有的類都是用來描繪對象的,如果一個類中沒有包含足夠的信息來描繪一個具體的對象,這樣的類就是抽象類。 也就是說,一個類無法描述其生成對象的某一行爲(方法),那我們就在這個類中添加抽象方法,來讓子類自己重寫,或者說定義該方法的內容。就比方說,一個動物類,幾乎每中動物都有其獨特的移動方式,比方說狗是跑,兔子是跳,烏龜是爬。緊靠動物類我們無法描述所有對象的行爲,所以我們可以用抽象方法,來讓子類自己描述其移動方法。

接口:接口可以看成比抽象類更抽象的一種特殊的類,但它並不是類。接口只包含全局變量和公共的抽象方法。如果說類是一種模板,接口就是一種框架,它已經規定了數據的大小,無法更改,而且我們要用這個框架,必須按照它的樣子往裏面添加東西,也就是必須實現其已有的抽象方法。

總結

面向對象的目的就是爲了代碼的複用,可擴展性,可靠性。能夠構建大型的軟件項目。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章