Java面向對象小結。

Java是一門面向對象編程語言,那麼什麼是面向對象呢?
百度百科中這樣描述:

面向對象(Object Oriented)是軟件開發方法。面向對象的概念和應用已超越了程序設計和軟件開發,擴展到如數據庫系統、交互式界面、應用結構、應用平臺、分佈式系統、網絡管理結構、CAD技術、人工智能等領域。面向對象是一種對現實世界理解和抽象的方法,是計算機編程技術發展到一定階段後的產物。
面向對象是相對於面向過程來講的,面向對象方法,把相關的數據和方法組織爲一個整體來看待,從更高的層次來進行系統建模,更貼近事物的自然運行模式。

這裏我們用木匠打一個比方,一個“面向對象”的木匠始終關注的是所製作的椅子,第二位纔是所使用的工具;而一個“非面向對象的”木匠首先考慮的是所使用的工具。

面向對象的內容有:

  • 類 ->定義了一件事物的抽象特點。類的定義包含了數據的形式以及對數據的操作。

  • 對象 ->是類的實例。

  • 成員變量 ->成員變量 − 定義在類內部的變量。該變量的值對外是不可見的,但是可以通過成員函數訪問,在類被實例化爲對象後,該變量即可稱爲對象的屬性。

  • 成員函數(方法) ->定義在類的內部,可用於訪問對象的數據。

  • 封裝

  • 繼承

  • 多態

  • 父類 ->可以被其他類繼承,將這種類稱爲基類,父類或超類。

  • 子類 ->繼承其他類的類,稱爲子類或者派生類。

  • 接口 ->是指對協定進行定義的引用類型。其他類型實現接口,以保證它們支持某些操作。接口指定必須由類提供的成員或實現它的其他接口。

  • 重載 ->函數或者方法有同樣的名稱,參數類型或者參數個數不同。
    所有的面向對象編程語言的三大特性是:

  • 封裝

  • 繼承

  • 多態

(!!!注意:面向對象編程語言而不是Java語言的特性)。
我們具體總結三大特性。

封裝

封裝顧名思義也就是把一個事物包裝起來,不被外界看到。在程序中封裝就是隱藏對象的屬性和實現細節,僅對外公開接口,控制在程序中屬性的讀和修改的訪問級別;將抽象得到的數據和行爲(或功能)相結合,形成一個有機的整體。
這樣做的目的是使使用者不必關係類內部具體的實現方法,降低了學習成本。也達到了對成員訪問權限的合理控制,使不同類之間的相互影響減少到最低限度,進而增強數據的安全性和簡化程序的編寫工作。打個比方說:我們不需要具體清楚爲什麼我們在鍵盤上按下0鍵,屏幕上就會打印出一個0,我們只需要知道我們按什麼屏幕上就會打印出什麼這就夠了。

繼承

代碼中創建的類, 主要是爲了抽象現實中的一些事物(包含屬性和方法). 有的時候客觀事物之間就存在一些關聯關係, 那麼在表示成類和對象的時候也會存在一定的關聯.繼承是一種 is -> a 的關係。

  • 使用 extends 指定父類.
  • Java 中一個子類只能繼承一個父類 (而C++/Python等語言支持多繼承).
  • 子類會繼承父類的所有public 的字段和方法.
  • 對於父類的 private 的字段和方法, 子類中是無法訪問的.
  • 子類的實例中, 也包含着父類的實例.可以使用 super 關鍵字得到父類實例的引用.

如果我們將父類中的成員屬性設爲private, 子類不能訪問. 但是設成 public, 又違背了我們 “封裝” 的初衷。我們可以使用 protected 關鍵字進行修飾。

  • 對於類的調用者來說, protected 修飾的字段和方法是不能訪問的
  • 對於類的 子類 和 同一個包的其他類 來說, protected 修飾的字段和方法是可以訪問的

當final 關鍵字修飾一個類時,它代表的含義就是這個類不能再被繼承。

還有一種類之間的關係類似於繼承,就是組合,它是一種 has -> a 的關係。
類似一個 team 類,它的可以有 teamleader 類,也有 member。一個隊伍中既有隊長,也有隊員。

多態

1.向上轉型
用一個父類的引用,指向一個子類的實例被稱爲向上轉型。
2.動態綁定
父類和子類中有一個相同的方法(除了具體實現內容不同,其他都相同),在Java中調用這個方法時, 究竟執行了哪段代碼 (是父類方法的代碼還是子類方法的代碼) , 要看究竟這個引用指向的是父類對象還是子類對象. 這個過程是程序運行時決定的(而不是編譯期), 因此稱爲 動態綁定.
3.方法重寫
子類實現父類的同名方法, 並且參數的類型和個數完全相同, 這種情況稱爲 覆寫/重寫/覆蓋(Override).
關於重寫的注意事項
1.重寫和重載完全不一樣. 不要混淆(思考一下, 重載的規則是啥?)
2.普通方法可以重寫, static 修飾的靜態方法不能重寫.
3.重寫中子類的方法的訪問權限不能低於父類的方法訪問權限.

什麼是多態?
當類的調用者在使用類時,不必關心這個類是啥類。也不需要關心是哪個子類的實例,只需要知道類中有某個方法直接調用就行。
多態也是封裝的更進一步,之前封裝是爲了讓類的調用者不需要知道類的實現細節(還是得知道這個是啥類),多態這裏類的調用者都不需要知道這是個啥類,只需要知道類中有某個方法就行。

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