1. 程式人生 > >JAVA小白系列之第二個分支:面向物件程式設計

JAVA小白系列之第二個分支:面向物件程式設計

想必剛入門的小白總是搞不清楚面向物件和麵向過程這兩個概念,雖然我在前面有所提及,但是都是泛泛而談,也有各種語言融入進去,不理解的會越來越暈,那麼,這節我就專門來講講什麼是JAVA的面向物件。

面向過程和麵向物件回顧
不記得概念的可以具體看看之前的文章,這裡僅做簡單的回顧:

面向過程
關注於流程本身,也就是關心資料的流向

面向物件
關注於模型本身,讓程式碼具有人類的思維模式,更貼近於人類的理解

總結:比如,如果說需要去做一件事,那麼如果以面向過程的方式去做那麼需要關注這件事的流程:第一步幹嘛,第二部幹嘛等等,如果以面向物件的方式去做那麼就需要考慮到這裡面有幾個物件,每個物件有哪些屬性和行為,物件之間又如何進行互動,看虛擬碼:

面向過程:

Function progress_1();

Function progress_2();

Function progress_3();

......

Main(){

progress_1();

progress_2();

progress_3();

}

面向物件:

Class 物件1{

//屬性

//行為

}

Class 物件2{

//屬性

//行為

}

 

Class 物件3{

//屬性

//行為

}

Main(){

//物件之間的互動過程

}

面向物件的三大概念
剛開始接觸這三個概念的小白,會很蒙,面試的時候問起來,還是無從回答,或者回答得含含糊糊的,給面試官留下不好的印象,那麼我現在就來大白話一下這三個概念,做到人人都可以在面試中回答出優秀的答案。

封裝
從字面來看,封裝就是把東西包起來,那麼為啥要包起來呢?一般來說你想想,如果你快遞買了一些東西,咳咳,你懂得,那麼店家會怎麼辦?用一個沒有描述的箱子包裝得死死的,那麼為什麼呢?就是不讓別人看到對吧,那麼在物流中,也需要用膠帶嚴密的封裝,那麼為何要盒子裝,要封裝?各位看客絕對說,這不明擺著麼,為了保護商品嘛,對的,那麼在面向物件程式設計中,封裝就是用來保護裡面的屬性也就是成員變數【商品】的,這下明白了吧,一會兒我們再來看看具體的java是怎麼封裝的。

繼承
同樣,先看看字面意思,先想想看,什麼情況最常用到這個詞,那就是某某人去世了,誰誰誰繼承了他的遺產,對吧,那麼繼承這個字面意思講的就是從某個事引申出別的事,而引申出的事情具備被引申出事情的屬性並且引申出的事情有它自己的屬性,就像上面說的繼承了遺產,那麼你就擁有了這個遺產,並且你還可以用它去掙錢然後擴充這筆遺產對吧?同樣的,在面向物件程式設計中,繼承就是從上一個物件上拿一些東西過來,並且你還可以對引申的物件進行補充,那麼在程式設計中這個引申兩個字就變為了派生,所以大家經常說某某類派生自某某類【類是物件的模板,所以這麼說也沒問題對吧,不懂類和物件的關係的去看看第一節】。

多型
字面意思呢,就是多個形態,那麼在瞭解了繼承的概念後,這個就簡單了,就是同一個物體有多種形態嘛,你想想,你繼承了遺產,那麼這個遺產是不是有兩個形態:1、原遺產 2、你擴充了它,再來,你父親生了你,你是不是繼承了父親的特性,那麼你是不是有兩個形態:1、父親具有的形態 2、你自己的形態,再來,如果你學習了C語言,很厲害,然後你根據C語言開發了另外一門語言,那麼你的這個語言就有兩種形態:1、c語言的特性 2、你語言獨有的特性等等,例子數不勝數,也就是說多型這個概念是在繼承這個概念上的一種解釋。

那麼,面試的時候應該知道怎麼回答了吧?封裝就是保護物件屬性,繼承就是可以讓物件之間形成血脈關係,能夠補充物件的額外屬性,複用程式碼,多型就是在繼承的概念上來描述了一個物件有多個形態的事實,繼承是多型的依據~

JAVA的面向物件
來看看java的面向物件是怎樣的:

//定義一個人類的類

Class Humen{

Private String eyes;

Private String foot;

Private String leg;

//省略封裝方法

Public void walk(){};//走路

Public void see(){};//看人

}

定義一個學生類,讓它繼承自人類,畢竟學生也是人對吧,那麼按照我們之前的概念來看,學生也有了人的性質:眼睛、腳、胳膊等,還有走路看人的方法,這些都是人類具有的性質,那麼學生又擴充了上課和說話的能力,那麼這裡以多型的概念來說就可以說,學生有兩個形態:1、人類 2、學生 對吧~

Class Student extends Humen{//extends關鍵字表示繼承

Private String name;//名字屬性【成員變數】

Private int age;//年齡屬性【成員變數】

Public void setName(){};//

Public void getName(){};// 這兩個方法對名字進行了封裝,也就是如果我要訪問name這個屬性,那麼我就只能通過這兩個方法來訪問,那麼為什麼說這是封裝,你想你是不是可以再方法裡防寫它的程式碼,比如許可權判斷,比如你還可以記錄誰改了對不?

//age一樣,這裡省略

....

Public void speak(){};//這裡就是說話的方法

Public void doHomeWork(){};//這裡就是做作業的方法

}

Main(){

Student stu=new Student();//這裡就是生成了一個學生物件,還記得我一直說類就是物件的模板麼,這裡用關鍵字new 來產生一個物件。Java產生一個物件是這樣的:

類名 物件名=new 類名(引數);

Humen humen=stu;//這裡就是讓學生向上轉型,也就是多型中讓物件變為另外一種形態,這裡就是讓學生變為了人這個形態,當然你也可以把它變回去:stu=(Student)humen;括號表示強制轉換,畢竟你想想,向上轉型編譯器可以知道你派生自誰,但是向下轉型可能這個類派生出很多個子類,那麼我們就得手動告訴編譯器我想轉為這個類。

}

那麼以上就是java的面向物件三大特性的解釋:1、封裝採用set和get方法來訪問屬性 2、繼承通過extends關鍵自來繼承類 3、多型就是繼承關係的一種描述。

掛上知識樹
Ok,把這個知識點,掛上我們的知識樹:

 

腦袋裡有這麼一棵樹你還會忘麼?
--------------------- 
作者:老黃談JAVA 
來源:CSDN 
原文:https://blog.csdn.net/qq_27745951/article/details/83084966?utm_source=copy 
版權宣告:本文為博主原創文章,轉載請附上博文連結!