在java面向对象编程中_谈一谈你对封装_继承_多态概念的理解_Java新职篇:面向对象编程的3个原则是什么?...
原標題:Java新職篇:面向對象編程的3個原則是什么?
所有面向對象的編程語言都提供幫助你實現面向對象模型的機制,這些機制是封裝,繼承及多態性?,F在讓我們來看一下它們的概念。
封裝
封裝(Encapsulation)是將代碼及其處理的數據綁定在一起的一種編程機制,該機制保證了程序和數據都不受外部干擾且不被誤用。理解封裝性的一個方法就是把它想成一個黑匣子,它可以阻止在外部定義的代碼隨意訪問內部代碼和數據。對黑匣子內代碼和數據的訪問通過一個適當定義的接口嚴格控制。如果想與現實生活中的某個事物作對比,可考慮汽車上的自動傳送。自動傳送中包含了有關引擎的數百比特的信息,例如你正在以什么樣的加速度前進,你行駛路面的坡度如何,以及目前的檔位。作為用戶,你影響這個復雜封裝的方法僅有一個:移動檔位傳動桿。例如,你不能通過使用拐彎信號或擋風玻璃擦拭器影響傳動。所以檔位傳動桿是把你和傳動連接起來的惟一接口。此外,傳動對象內的任何操作都不會影響到外部對象,例如,檔位傳動裝置不會打開車前燈!因為自動傳動被封裝起來了,所以任何一家汽車制造商都可以選擇一種適合自己的方式來實現它。然而,從司機的觀點來看,它們的用途都是一樣的。與此相同的觀點能被用于編程。封裝代碼的好處是每個人都知道怎么訪問它,但卻不必考慮它的內部實現細節,也不必害怕使用不當會帶來負面影響。
Java封裝的基本單元是類。盡管類將在以后章節詳細介紹。現在仍有必要對它作一下簡單的討論。一個類(class)定義了將被一個對象集共享的結構和行為(數據和代碼)。
一個給定類的每個對象都包含這個類定義的行為和結構,好像它們是從同一個類的模子中鑄造出來似的。因為這個原因,對象有時被看作是類的實例(instances of a class)。所以,類是一種邏輯結構,而對象是真正存在的物理實體。
當創建一個類時,你要指定組成那個類的代碼和數據。從總體上講,這些元素都被稱為該類的成員(members)。具體地說,類定義的數據稱為成員變量(member variables)或實例變量(instance variables)。操作數據的代碼稱為成員方(member methods)或簡稱方法(methods)。如果你對C/C++熟悉,可以這樣理解:Java程序員所稱的方法,就是C/C++程序員所稱的函數(function)。在完全用Java編寫的程序中,方法定義如何使用成員變量。這意味著一個類的行為和接口是通過方法來定義的,類這些方法對它的實例數據進行操作。
既然類的目的是封裝復雜性,在類的內部就應該有隱藏實現復雜性機制。類中的每個方法或變量都可以被標記為私有(private)或公共(public)。類的公共接口代表類的外部用戶需要知道或可以知道的每件事情;私有方法和數據僅能被一個類的成員代碼所訪問,其他任何不是類的成員的代碼都不能訪問私有的方法或變量。既然類的私有成員僅能被程序中的其他部分通過該類的公共方法訪問,那么你就能保證不希望發生的事情就一定不會發生。當然,公共接口應該小心仔細設計,不要過多暴露類的內部內容

繼承
繼承(Inheritance)是一個對象獲得另一個對象的屬性的過程。繼承很重要,因為它支持了按層分類的概念。如前面提到的,大多數知識都可以按層級(即從上到下)分類管理。
例如,尊貴的獵犬是狗類的一部分,狗又是哺乳動物類的一部分,哺乳動物類又是動物類的一部分。如果不使用層級的概念,我們就不得不分別定義每個動物的所有屬性。使用了繼承,一個對象就只需定義使它在所屬類中獨一無二的屬性即可,因為它可以從它的父類那兒繼承所有的通用屬性。所以,可以這樣說,正是繼承機制使一個對象成為一個更具通用類的一個特定實例成為可能。下面讓我們更具體地討論這個過程。
大多數人都認為世界是由對象組成的,而對象又是按動物、哺乳動物和狗這樣的層級結構相互聯系的。如果你想以一個抽象的方式描述動物,那么你可以通過大小、智力及骨胳系統的類型等屬性進行描述。動物也具有確定的行為,它們也需要進食、呼吸,并且睡覺。這種對屬性和行為的描述就是對動物類的定義。
如果你想描述一個更具體的動物類,比如哺乳動物,它們會有更具體的屬性,比如牙齒類型、乳腺類型等。我們說哺乳類動物是動物的子類(subclass),而動物是哺乳動物的超類(superclass)。

由于哺乳動物類是需要更加精確定義的動物,所以它可以從動物類繼承(inherit)所有的屬性。一個深度繼承的子類繼承了類層級(class hierarchy)中它的每個祖先的所有屬性。
繼承性與封裝性相互作用。如果一個給定的類封裝了一些屬性,那么它的任何子類將具有同樣的屬性,而且還添加了子類自己特有的屬性。這是面向對象的程序在復雜性上呈線性而非幾何性增長的一個關鍵概念。新的子類繼承它的所有祖先的所有屬性。它不與系統中其余的多數代碼產生無法預料的相互作用。
多態性
多態性(Polymorphism,來自于希臘語,表示“多種形態”)是允許一個接口被多個同類動作使用的特性,具體使用哪個動作與應用場合有關,下面我們以一個后進先出型堆棧為例進行說明。假設你有一個程序,需要3種不同類型的堆棧。一個堆棧用于整數值,一個用于浮點數值,一個用于字符。盡管堆棧中存儲的數據類型不同,但實現每個棧的算法是一樣的。如果用一種非面向對象的語言,你就要創建3個不同的堆棧程序,每個程序一個名字。但是,如果使用Java,由于它具有多態性,你就可以創建一個通用的堆棧程序集,它們共享相同的名稱。
多態性的概念經常被說成是“一個接口,多種方法”。這意味著可以為一組相關的動作設計一個通用的接口。多態性允許同一個接口被必于同一類的多個動作使用,這樣就降低了程序的復雜性。選擇應用于每一種情形的特定的動作(specific action)(即方法)是編譯器的任務,程序員無需手工進行選擇。你只需記住并且使用通用接口即可。
再拿狗作比喻,一條狗的嗅覺是多態的。如果狗聞到貓的氣味,它會在吠叫并且追著它跑。如果狗聞到食物的氣味,它將分泌唾液并向盛著食物的碗跑去。兩種狀況下是同一種嗅覺器官在工作,差別在于聞到了什么氣味,也就是有兩種不同類型的數據作用于狗的鼻子!在一個Java程序中使用方法時,也可以采用這個通用的概念。返回搜狐,查看更多
責任編輯:
總結
以上是生活随笔為你收集整理的在java面向对象编程中_谈一谈你对封装_继承_多态概念的理解_Java新职篇:面向对象编程的3个原则是什么?...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1920×1080是几k
- 下一篇: 王者荣耀王者之路是不是没有了