面向對象的三大特征
什么是面向對象:
現實生活中存在各種形態不同的事物,這些事物之間存在着各種各樣的聯系。在程序中使用對象來映射現實中的事物,使用對象的關系來描述事物之間的聯系,這種思想就是面向對象。
一、封裝
目的:隱藏類或方法的實現細節
讓使用者只能通過事先定制好的方法來訪問數據。
便於修改,增強代碼的可維護性。
簡單來說就是:將對象的屬性和行為封裝起來,不需要讓外界知道具體實現細節。
高內聚,低耦合
二、繼承
繼承是多態的前提,沒有繼承,就沒有多態。繼承主要解決的問題就是共性抽取。
概念:子類(也稱派生類,導出類)繼承父類(也稱超類,基類),父類就是類中通用的共性。
父類和子類的關系是(is ----a),子類只有一個父類。
意義:復用代碼---子類擁有父類的所有可見成員。
不同的類具有某些共同的屬性和行為。
實現多態。
繼承的實現
使用extends關鍵字,形式如下:
class 子類名 extends 父類名{
//類體
}
所有的類都直接或間接承接於java.lang.Object
protected關鍵字
protected可以在同類,同一包中的類,子類被調用,不能被其他包中的類調用。
當類希望被繼承時,某已成員可以被子類訪問,則應使用protected修飾該成員。
super關鍵字
指向父類實例的引用
用來顯式訪問父類成員或構造方法
方法重載和方法覆蓋(重寫)
方法名稱和參數列表不一致(方法重載)
方法名稱和參數列表一致(方法覆蓋)
三、多態
在同一繼承樹上的不同對象針對同一行為的不同表現。
(有繼承關系同時有方法的覆蓋)
例如,當聽到“Cut” 這個單詞時,理發師的行為表現是剪發,演員的行為表現是停止表演等。不同的對象,所表現的行為是不一樣的。
格式:
父類名稱 對象名 = new 子類名稱();
接口名稱 對象名 = new 實現類名稱();
例如:學生既是學生也是人。(兩種形態:學生 人)
類型變換
向上轉型(子類轉為父類)自動轉換(隱性轉換)
Dog dog = new PetDog();
向下轉型(父類轉為子類)須強制類型轉換
PetDog petDog = (PetDog)dog
instanceof運算符
對象名稱 instanceof 類名
(判斷這個對象是否是類的實例)
Object類
構造方法:Object()
常用操作:equals和toString
“火鍋底料”例子說明三者之間的關系
用一個例子來說明三者間的關系:
“火鍋底料”,火鍋店老板在生產火鍋底料的時候,不想要其他人知道它好吃的秘訣,就用封裝的方法把它配料的秘訣隱藏起來。但是每次一鍋一鍋進行火鍋底料的熬煮,很浪費時間和空間,這個時候火鍋老板就想到用繼承的方法,把相同的佐料直接壓縮成一包一包的,不用每次去熬煮火鍋底料,就不用重復去做相同的事情。但是過了一段事件后,顧客反應火鍋底料有點單調,沒有特色,這個時候火鍋點老板就想出其他口味的火鍋底料來滿足顧客。