目錄
一、面向物件
二、物件
三、類
四、封裝、繼承、多型
1、封裝
2、繼承
3、多型
五、抽象
六、介面
七、主觀理解:面向物件三大特征為何是封裝、繼承、多型,而沒有抽象、介面?
一、面向物件
單說“面向物件”四個字,有點迷糊,搞不清楚它到底是什么,有什么用,但加上“編程思想”兩個字——面向物件的編程思想,這就明白一點點了,
面向物件是一種編程思想,使用物件、類、封裝、繼承、多型等概念設計出一款類比真實世界的系統,在面向物件的思想中,子類可以繼承父類的屬性和方法,可以重寫父類方法,也可以有自己的方法;沒有足夠的資訊描繪物件就定義成抽象類;可以用介面實作不同介面類中的行為等,
在上面的一段話中,提到了很多名詞:物件、類、封裝、繼承、多型、屬性、方法、抽象、介面,那么就按這些名詞來講講面向物件到底是個什么,
二、物件
萬物皆物件,
怎么理解呢?為什么說“萬物皆物件”?為什么可以說“萬物皆物件”呢?還有物件到底是什么?是母上大人常念叨的物件嗎?
物件,客觀存在的事物都是物件,比如人、比如手機、比如動物等等,可以是活的東西,也可以是死物,總之,物件有屬性,有行為,
人,有屬性:姓名、性別、年齡等,有行為:學習、作業、吃飯、睡覺等,
- 小明今年2歲了,可以自己吃飯了
- 小李今年3歲了,可以去上幼稚園了
手機,有屬性:品牌、顏色、價格等,有行為:發短信、打電話、拍照等,
- OPPO手機今天降價100元到手!紫色白色任君挑選,功能強大,拍攝夜景更清晰
- 華為手機今天降價100元到手!紫色白色任君挑選,功能強大,拍攝夜景更清晰
三、類
類是物件的抽象,是對現實生活中一類具有共同屬性和行為的事物的抽象,
物件中的屬性和行為在類中被稱為成員變數和成員方法,
四、封裝、繼承、多型
1、封裝
單看字面意思來理解的話,就是把某種東西放進袋子里面封口,
在程式中也確實是這樣:把相同的屬性和行為放到一個類中封口,再加上用private修飾屬性,用getXxx()/setXxx()方法在外部訪問屬性,可以實作代碼的安全性和復用性,
2、繼承
繼承就像是一個擁有袋子的人(A)要把里面的東西通過某種方式分享出來給別人(B、C、D......)一起使用,
- 可以分享給多個人(B、C、D......)
- 而B、C、D等人只能從A手中拿東西,不能再從別人手中拿東西
- 某種方式——繼承extends
- B、C、D等人拿到東西后可以在這些東西的基礎上添加自己的東西——添加屬性、行為,方法重寫
3、多型
同一個物件,在不同時刻表現出來的不同形態,就是一個類的多種形式,
前提是:
- 有繼承/實作關系——public class Cat extends Animal {}
- 有方法重寫
- 有父類參考指向子類物件——Animal animal = new Cat();
貓類Cat繼承了動物類Animal,并重寫了動物類中的方法,這個時候我們在主函式里面用父類參考指向子類物件:Animal animal = new Cat(); ,訪問animal的屬性就看動物類Animal中有沒有該屬性,呼叫animal的方法就看貓類Cat中是否重寫了該方法,執行的結果就是一個多型的顯示,
也正是因為呼叫animal的方法需要判斷貓類Cat中是否有重寫該方法,如果沒有就不能呼叫,也就是說如果貓類Cat中如果有自己的方法是沒辦法通過父類指向的子類物件來呼叫的,需要將該子類物件從父類轉型為子類(這叫做向下轉型),這樣才能用animal執行貓類Cat中的獨特方法,
五、抽象
抽象類必須使用abstract關鍵字修飾,
抽象類中可以放有方法體的方法,也可以沒有抽象方法,
抽象類的子類(普通類),要么重寫抽象類中的所有抽象方法,要么它自己就是抽象類,可以不重寫所有的抽象方法,
抽象類不能直接實體化,但可以通過子類的多型來實體化,
參考鏈接:java中抽象類一般什么時候用到,用抽象類有什么好處?_maguanghui_2012的專欄-CSDN博客_抽象類什么時候用
六、介面
介面用關鍵字interface修飾,
介面與類之間不說繼承extends,說“類 實作implements 介面”,
類 實作 介面1,介面2,介面3,...... ——> Son implements Father,Mother,Grandma{} ,
介面與介面之間可以繼承extends,有單繼承、多繼承,
介面中只有用public static final修飾的常量,
介面中只有用public abstract修飾抽象方法,
| 區別 | 介面類 | 抽象類 |
| 設計理念 | 對行為抽象,主要是行為, | 對類抽象,包括屬性、行為, |
| 成員 | 只有常量和抽象方法, | 有變數,常量;有構造方法;有抽象方法,有非抽象方法, |
| 關系 | 1、介面與介面之間,可以單繼承,也可以多繼承, 2、類與介面之間,可以單實作,也可以多實作 | 類與類之間可以單繼承, |
七、主觀理解:面向物件三大特征為何是封裝、繼承、多型,而沒有抽象、介面?
物件,是具體存在現實中的事物,比如人,比如手機,
那么如果將物件用代碼表示出來呢?首先我們要知道我們表示的是什么?我們表示的是人做事,那么是什么人呢?小李?小華?還是李華?人又在做在什么事呢?吃飯?睡覺?這些都是代碼要表示出來的,由此引申出兩個概念:屬性和行為,
仍舊以人為例,屬性就是人的姓名、性別、年齡等,是這個人所具有的特征,行為就是物件的操作,可以有吃飯、作業、學習、睡覺等,我們確定了一個物件的屬性和行為之后,就可以用代碼來構建了,用不同的屬性搭配不同的行為,
重點來了,既然可以用代碼來表示人這個物件,將人抽象映射為代碼,那么其他物件呢?貓、狗、電風扇等其他真實世界存在的物件,其實他們都可以映射到代碼中用代碼表示,但是如果一個一個來就太麻煩了,數學中解方程組的時候有一個把相同未知數的放一起加減的思想,那么我們也可以把相同的屬性和行為“封裝”到一個類中,需要用的時候“繼承”出來用就是了,由于實際上我們是需要多個不同的物件,就像在一堂課程中,學生應該認真學習,但實際上會有學生玩游戲,映射到代碼上,就是繼承了封裝的類后,一個類會出現多種表現形式,多型可以理解為方法重寫,
由于抽象類中要求子類必須重寫父類中的抽象方法或者子類自己必須是抽象類,我更多的是把抽象類看成多型這個特征的一個擴展,因為多型是說父類指向的子類不能執行子類自己獨有的方法,必須向下轉型,
另一個特征:介面,由于Java的繼承是單繼承,子類只能有一個父類,但我們有時候需要從各個不相關的類中得到他們的特點使用,所以提出了介面概念,在我看來,介面更像是面向物件的一個擴展性特征,算不得基本的特征,所以三大基本特征沒有它,

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/341861.html
標籤:java
上一篇:為什么一定要學習設計模式
下一篇:Java-陣列詳解
