java—面向物件-抽象類
阿新 • • 發佈:2021-08-12
1.類與物件的關係
-
類是一種抽象的資料型別,它是對某一類事物整體描述/定義,但並不能代表某一個具體的事物
動物 植物 手機 電腦……
Person類 Pet類 Car類 這些類都是用來描述/定義某一類具體的事物應該具備的特點和行為
- 物件是抽象概念的具體例項
張三就是一個人的具體例項
能夠體現出特點,展現出功能的具體例項,而不是一個抽象的概念
2.建立及初始化物件
- 使用new關鍵字建立物件
- 使用new關鍵字建立的時候,除了分配記憶體空間之外,還會給建立好的物件進行預設的初始化以及對類中構造器的呼叫。
-
類中的構造器也稱為構造方法,是在進行建立物件的時候必須要呼叫的,並且構造器有以下兩個特點
1.必須和類的名字相同
2.必須沒有返回型別 也不能寫void
*.定義有參構造後,如果想使用無參構造,需要顯示定義一個無參的構造
-
構造器必須掌握
3.封裝
-
該露的露 該藏的藏
我們程式設計要求"高內聚,低耦合"。高內聚就是類的內部資料操作細節自己完成,不允許外部干涉;低耦合:僅暴露少量的方法給外部使用。
-
封裝(資料隱藏)
通常,應該禁止直接訪問一個物件中資料的實際表示,而應通過操作介面來訪問,這稱為資訊隱藏。
-
記住一句話:屬性私有:get/set
-
優點:
1.提高程式的安全性,保護資料
2.隱藏程式碼的實現細節
3.統一介面
4.系統可維護增加了
4.繼承
- 繼承的本質是對某一批類的抽象,從而實現對現實世界更好的建模
- "extends"的意思是擴充套件,子類是父類的擴充套件
- JAVA中類只有單繼承,沒有多繼承!
- 繼承是類和類之間的一種關係,除此之外,類和類之間關係還有依賴,組合,聚合等。
- 繼承關係的兩個類,一個為子類(派生類),一個為父類(基類)。子類繼承父類,用關鍵字extends來表示。
- 子類和父類之間,從意義上講應該具有"is a"的關係。
- object類:在java中,所有的類都預設直接或者間接繼承object。
- super注意點:
- super呼叫父類的構造方法,必須在構造方法的第一個
- super只能出現在子類的方法或者構造方法中!
- super和this不能同時呼叫構造方法
- 方法重寫:需要有繼承關係,子類重寫了父類的方法!
- 方法名必須相同
- 引數列表必須相同
- 修飾符:範圍可以擴大但不能縮小:public>protected>default>private
- 丟擲異常:範圍可以被縮小,但不能被擴大
- 重寫的原因:
- 父類的功能子類不一定需要,或者不一定滿足 //alter+insert override重寫方法
5.多型
- 即同一方法可以根據傳送物件的不同而採用多種不同的行為方式
- 一個物件的實際型別是確定的,但可以指向物件的引用型別有很多(父類 有關係的類)
- 多型存在的條件
- 有繼承關係
- 子類重寫父類的方法
- 父類的引用指向子類的物件
- 注意:多型是方法的多型 屬性沒有多型性
- instance of:它的作用是判斷其左邊物件是否為其右邊類的例項,返回boolean型別的資料 //x intance of y 判斷x與y是否有父子關係
抽象類
- abstract修飾符可以用來修飾方法也可以修飾類,如果修飾方法,那麼該方法就是抽象方法,如果修飾類,那麼該類就是抽象類。
- 抽象類中可以沒有抽象方法,但是有抽象方法的類一定要宣告抽象類。
- 抽象類,不能使用new關鍵字來建立物件,它是用來讓子類繼承的。
- 抽象方法只有方法的宣告,沒有方法的實現,它是用來讓子類實現的。
- 子類繼承抽象類,那麼就必須要實現抽象類沒有實現的抽象方法,否則該子類也要宣告為抽象類。
介面
- 普通類:只有具體實現
- 抽象類:具體實現和規範(抽象方法)都有!
- 介面:只有規範!
- 介面就是規範,定義的是一組規則,體現了顯示世界中“如果你是……則必須能……”的思想,如果你是汽車,則必須能跑。
- 介面本質是契約,就像法律一樣,制定好後大家共同遵守。
- oo的精髓,是對物件的抽象,能體現這一點的就是介面。為什麼我們討論設計模式都是針對具備了抽象能力的語言(比如c++,c#,java等),就是因為設計模式所研究的,實際上就是如何合理的去抽象
- 宣告類的關鍵字是class,宣告介面的關鍵字是interface。
內部類
- 內部類就是在一個類的內部在定義一個類,比如,A類中定義了一個B類,那麼B類相對於A類來說就是內部類,而A類相對於B類來說就是外部類。