用通俗易懂的語言來理解java面向對象的思想

你們都知道,java是面向對象的編程,掌握面向對象的編程思想是掌握java編程語言的核心,可是不少人在面向對象方面都存在或多或少的誤區,有的是剛學完C語言,受面向過程思想幹擾,在剛剛接觸java的時候措手不及,感受無從下手,我想經過本身對java的學習,用通俗易懂的語言,來談談本身對面向對象的理解,但願能夠幫助你們來理解面向對象的編程思想。
理解面向對象的編程的思想,首先我想給你們一個很是熟悉的一個例子,讓你們對面向對象和麪向過程有一個大體的理解,想必你們都知道那個「老張開車去東北」的例子,用面向對象的思路理解:你首先得造一個車,而後包括掛檔,每一步都得本身一步一步的線性去完成;用面向對象的思路來理解的話,直接調個車,找個司機,而後告訴他去東北,而後其餘的就不用你管了,你可能隱約的感受到,面向對象的思路彷佛省了很多事。
理解面向對象的思想,首先咱們須要知道在理解面向對象時須要知道的幾個名詞:對象,類,還有類中一些成員變量和成員方法,下面咱們一一來進行分析:
[b]對象:[/b]
對象是人們要進行研究的任何事物,從簡單的一個小分子到複雜的汽車飛機均可以看作對象,只是有時對象要根據人們研究問題的須要來肯定,對象不必定是具體的,有時也能夠表示抽象的規則或計劃。
[b]類:[/b]
類在java中是具備相同或類似性質的對象的抽象體現形式。也就是說,類的實例化就是建立對象的過程類的實例就是對象。
其實類的建立在必定程度上是符合人的思惟的,我想借一個例子來講明這個問題,同時熟悉一下類的大體結構:
咱們建立一個People類:
package com.guang.email;

public class People {
private String head;
private String arms;
private String legs;

public People() {

}

public void hit(){
System.out.println("hit you");
}
public void eat(){
System.out.println("我要吃飯");
}

}

首先咱們看一下類結構,有成員變量,成員方法,還有構造方法,對於結構這裏就很少講了,有不少同窗不明白構造方法是幹什麼的,其實,構造方法是在實例化對象時執行的方法,一個類能夠有不少構造方法,根據你建立對象時參數的不一樣來調用不一樣的構造方法,這就是所說的重載。
對於People類咱們就叫他人類吧,你說人類是個什麼,你能夠摸的着嗎,其實他就是一個定義,一個抽象的東西,可是當咱們在對他實例化時,你就能夠知道他是一個具體存在的東西:例如:
People jim = new People();    jim.hit();    jim.eat();
咱們實例化出了jim這我的的對象,是真實存在的,具體的,有頭,有胳膊,還有腿等,而且他還能夠打人,吃飯。 其實面向對象並不難,很接近咱們現實生活的,就是經過咱們對天然界的認知,通過一點點的轉變,就轉換到編程語言上來了,也就是說,你用天然的思惟去理解考慮問題就能夠了,可是剛開始咱們會不習慣,就像Thinking in java 裏寫的那樣:「咱們可能會被這種簡單性所難倒」你須要一段時間去習慣,開始的時候能夠先模仿,寫的多了可能慢慢就會體會到面向對象的奧妙。 理解了上面對面向對象的一些基礎的東西之後,咱們來看面向對象的三個特性:封裝、繼承、多態。看似簡單的六個字,倒是面向對象的核心,下面咱們一塊兒來看看這三個特性: [b]封裝:[/b] 面向對象最基礎的一個特性,封裝性,封裝是根據須要,把代碼和指令代碼捆在一塊兒,就像一個保護器,防止外界代碼隨意的訪問,而是根據該保護器定義的接口來控制,封裝的好處是根據問題的須要,封裝代碼的好處是每一個人都知道怎樣訪問代碼,進而無需考慮實現細節就能直接使用它,也不用擔憂其餘的一些反作用。 在JAVA中,最基本的封裝單元是類,一個類定義着將由一組對象所共享的行爲(數據和代碼).一個類的每一個對象均包含它所定義的結構與行爲,這些對象就好象是一個模子鑄造出來的.因此對象也叫作類的實例。   在定義一個類時,須要指定構成該類的代碼與數據.特別是,類所定義的對象叫作成員變量或實例變量.操做數據的代碼叫作成員方法.方法定義怎樣使用成員變量,這意味着類的行爲和接口要由操做實例數據的方法來定義。   因爲類的用途是封裝複雜性,因此類的內部有隱藏實現複雜性的機制.因此JAVA中提供了私有和公有的訪問模式,類的公有接口表明外部的用戶應該知道或能夠知道的每件東西.私有的方法數據只能經過該類的成員代碼來訪問.這就能夠確保不會發生不但願的事情。 [b]繼承 [/b]   繼承是指一個對象從另外一個對象中得到屬性的過程.是面向對象程序設計的三大原則之二,它支持按層次分類的概念.例如,黑種人是人的一種,美國人有時白種人的一種,.若是不使用層次的概念,每一個對象須要明肯定義各自的所有特徵.經過層次分類方式,一個對象只須要在它的類中定義是它成爲惟一的 各個屬性,而後從父類中繼承它的通用屬性.所以,正是因爲繼承機制,才使得一個對象能夠成爲一個通用類的一個特定實例.一個深度繼承的子類將繼承它在類層次中的每一個祖先的全部屬性。   繼承與封裝能夠互相做用.若是一個給定的類封裝了某些屬性,它的任何子類將會含有一樣得屬性,另加各個子類全部得屬性.這是面向對象程序在複雜性上呈線性而非幾何增加的一個重要概念.新的子類繼承其全部祖先的全部屬性.子類和系統中的其餘代碼不會產生沒法預料的交互做用。  [b] 多態 [/b]   多態是指一個方法只能有一個名稱,但能夠有許多形態,也就是程序中能夠定義多個同名的方法,用"一個接口,多個方法"來描述.能夠經過方法的參數和類型引用。多態使得對象間交互更爲靈活。 封裝,繼承,多態的組合使用 :   在由封裝,繼承,多態所組成的環境中,程序員能夠編寫出比面向過程模型更健壯,更具擴展性的程序.通過仔細設計的類層次結構是重用代碼的基礎.封裝能讓程序員沒必要修改公有接口的代碼便可實現程序的移植.多態能使程序員開發出簡潔,易懂,易修改的代碼.一樣,經過使用面向對象的設計原則,程序員能夠把一個複雜程序的各個構件組合在一塊兒,造成一個一致,健壯,可維護的程序 總的來講,所謂封裝,就是經過定義類而且給類的屬性和方法加上訪問控制來抽象事物的本質特性。所謂繼承,就是代碼重用,而多態,從另一個角度分割了接口和實現。 理解了以後這些以後,想必你對面向對象會有一個新的認識,那麼,接下來,能夠找個小的程序題,或者生活中的某個應用,來本身設計並實現它吧。 編程來源於生活,又迴歸與生活。