java基礎-談談你對面向對象的理解


 

一 前言

本篇文章的核心知識如下,主要是幫助大家更好的理解面向對象編程; 在這里插入圖片描述

二面向對象VS面向過程

 

2.1 面向過程編程

 

面向過程編程(Process Oriented Programming )其意指是面向過程編程,what?,過程是什么?

在這里插入圖片描述

 

面向過程編程其實是圍繞着代碼的執行過程而實現;我們打個比喻我現在想把昨天沒洗的衣服給洗了(笑話,這絕對不是我,我用純潔的人格擔保!!!),我要執行的步驟如下:

衣服倒進桶里; 將水倒進桶里;nei 添加洗衣液和各種香料等待30分鍾 洗刷刷.....

 

那轉為代碼就是:

 // 1這是個野生的方法---裝衣服
containClothes().......
// 2這是個野生的方法-----倒水
pourWater()..........
// 3 這是個野生的方法-------倒洗衣液
pourWashingLiquid()............
// 4 這是個野生的方法-----洗刷刷
washClothes().............

好麻煩啊,我洗個衣服竟然要執行這么步驟,敬佩前輩么洗刷刷能力

在這里插入圖片描述

 

2.2 面向對象編程

面向對象編程(Object Oriented Programming,OOP)其意指面向對象編程,略略略......這不是廢話么,沒錯啊就是這句廢話,我們要理解的核心概念是什么是對象?

在這里插入圖片描述

 

對象這個名稱其實很普通啊,比如你家里人經常會說,孩子啊,最近有對象了,奶奶等等着報孫子里,...........,這是真的么?難道java中面向對象編程就是指生活中相處的對象?那我編寫個女孩子對象,是不是就有對象啦,呵呵............,你想的真美好(跟代碼生孩子去吧!!!);

 

面向對象中的對象其實就是面向事物,《Think in java》中有一句話叫啥來着?萬物皆對象...額,一切皆對象...額,沒錯啥都是對象;好吧如果你是初學者去面試,就別吹這就話了,你想跟老程序搶飯碗啊!!!

 

在這里插入圖片描述

面向對象編程我們已經理解了,就是類似根據生活中中的事物編程,嗯?回到剛剛洗衣服的話題上,生活中的事物編程.......聰明如我這樣的孩子已經想到了,本寶怎么會自己洗衣服呢!!!太low了,我要叫一個對象來給我洗衣服,我就不叫其他人幫我洗了,會遭天妒,還是叫最普通的把,比如洗衣機這個對象;

 

我把衣服倒進洗衣機; 我把洗衣液倒進洗衣機; 開啟啟動程序,洗衣機麻煩你洗洗衣服啊哈哈;

可以看見我們簡化了一些步驟吖,不用拿桶了,不用自己洗衣服;轉換成代碼就是這樣

 

// 1 知識追尋者這個對象的方法---倒衣服
zxzxz.pourClothes()........
// 2 知識追尋者這個對象的方法---倒洗衣液
zszxz.pourWashingLiquid()............
// 3 洗衣機這個對象的方法-----洗衣服
WashingMachine.washClothes().............

面向對象中的對象在java編程中就是Object,每個對象都有自己的類型也就是Class,你可以這樣理解,一個類型有多個對象實例(instance),比如,洗衣機有小天鵝洗衣機對象,海爾洗衣機對象;

 

三 抽象

面向對象的本質其實就是抽象;啥是抽象啊,好深奧的感覺,膜拜當年的大佬用了這么高大尚的術語;抽象我們通俗的理解就是將具體的功能和行為屬性抽象出來看待成一個實體;說了這么多,你可能還是一臉懵逼........

 

在這里插入圖片描述

 

就以洗衣機為例子,我現在要將洗衣機有容納東西的功能,有排水的功能,有洗衣服的功能......好了這么多功能和屬性我將它們都抽象出來形成一個實體;那么代碼就是如下

public class WashingMaching {

public void contain(Object obj){
  // do contain
}

public void drainWater(){
  // do drain water
}

public void washingClothes(Clothes clothes){
 
}

}

四 創建對象

 

說了那么多關於對象的事情,但是永恆的主題你要告訴我對象是怎么創建的吧, 看如下代碼,創建對象是通過 new 這個關鍵字創建;我們創建了一個對象叫做 wm,也就是實例,它屬於 WashingMaching 這個類;執行drainWater()這個方法,表示實例wm執行了其成員方法;

 

// create object
WashingMaching wm = new WashingMaching();
// invoke method
wm.drainWater();

五 面向對象的三大原則

 

 

5.1 封裝

封裝其實就是將對象的屬性行為隱藏,使其不受外界干擾;我是個冷酷的孩子,不要用你那骯臟的想法揣測我!!!我內在神奇的能力你永遠不知道;封裝目的就是隱藏,防止被其他對象所破壞;就像人與人之間相處,一定要有隱私空間,難道你是暴露狂???

在這里插入圖片描述

 

5.2 繼承

 

繼承就是子類繼承父類,子類將擁有父類的所有屬性;說個玩笑,某某小伙子正在街頭流浪,突然有一天一隊軍隊圍住了他,一個矮矮的胖子告訴他,皇帝駕崩啦,你是皇帝唯一的兒子,快跟我回宮登基為帝,繼承家業吧!!!在java中都是單繼承,所有的對象都有個父類就是Object;使用extends關鍵字表示繼承關系;在繼承中添加新方法可以擴展對象功能,重寫父類方法可以實現子類特有功能;

在這里插入圖片描述

 

5.3 多態

 

多態表示一個對象可以表示出多種狀態,即對象的狀態是可以在子類和父類之間相互轉換;舉個簡單的栗子:小水滴,晨露,雨滴,水霧,本質上都是水,我們認為他們都繼承了水;小水滴可以轉換成水,這就是向上轉型(即向父類靠近),現在小水滴就表現出了2種狀態,一種是水的狀態,一種是小水滴的狀態;如果說水要轉換成晨露,就是向下轉型(向子類靠近),但是下轉型是有風險的,晨露是水,難道水就一定只有晨露這個狀態么?顯然不可能,水還可以轉為雨滴,水霧等.....,通常向下轉型是要做類型判斷,使用關鍵字 instanceof判斷;

在這里插入圖片描述

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM