面向物件(封裝;繼承;多型)
面向物件(OOP)
本質:以類的方式組織程式碼,以物件的組織(封裝)資料
抽象的程式設計思想
封裝
-
該露的露,該藏的藏
-
程式設計要追求“高內聚,低耦合”。
-
高內聚:類的內部資料操作細節自己完成,不允許外部干涉
-
低耦合:僅暴露少量的方法給外部使用
-
-
-
封裝
-
通常,應禁止直接訪問一個物件中資料的實際表示,而應通過操作介面來訪問,這稱為資訊隱藏
-
繼承
-
繼承的本質是對一批類的抽象,從而實現對現實世界更好的建模
-
extends的意思是“擴充套件”。子類是父類的擴充套件
-
Java中類只有單繼承,沒有多繼承 (介面可以多實現:implements)
-
繼承是類和類之間的一種關係。除此之外,類和類之間的關係還有依賴、組合、聚合等
-
繼承關係的兩個類,一個為子類(派生類),一個為父類(基類),子類繼承父類,需使用extends關鍵字
-
子類和父類之間,從意義上來講應該具有“is a”的關係
-
Object類:在Java中,所有的類都預設直接或間接繼承Object
-
super
-
super呼叫父類的構造方法,必須在構造方法第一個
-
super必須只能出現在子類的方法或者構造方法中
-
super和this不能同時呼叫構造方法
-
-
Vs this:
-
代表的物件不同:
-
this:本身呼叫者這個物件
-
super:代表父類的引用
-
-
前提:
-
this:沒有繼承也可以使用
-
super:只能在繼承條件下才能使用
-
-
構造方法:
-
this():本類的構造
-
super():父類的構造
-
-
-
重寫:需要有繼承關係,子類重寫父類的方法!
-
方法名必須相同
-
引數列表必須相同
-
修飾符:範圍可以擴大,但不能縮小
-
public>protected>default>private
-
-
丟擲的異常:範圍可以縮小,但不能擴大
-
ClassNotFountException-->Exception(大)
-
-
-
重寫:子類的方法和父類必須要一致,方法體不同!
-
為什麼需要重寫:
-
父類的功能,子類不一定需要,或不一定滿足
-
@override
-
IDEA快捷鍵:ctrl+O
-
多型
-
即同一方法可以根據傳送物件的不同而採用多種不同的行為方式
-
一個物件的實際型別是確定的,但可以指向物件的引用的型別有很多
-
多型存在的條件
-
有繼承關係
-
子類重寫父類方法
-
父類引用指向子類物件
-
-
多型是方法的多型,屬性沒有多型
-
父類和子類,有聯絡 (若沒有,則出現型別轉換異常! ClassCastException)
-
存在條件:繼承關係,方法需要重寫,父類引用指向子類物件
-
Father f = new Son();
-
-
不可重寫方法:
-
static方法:屬於類,不屬於例項
-
final常量
-
private方法
-
抽象類(abstract)
-
abstract修飾符可以修飾方法也可以修飾類,如果修飾方法,那麼該方法就是抽象方法;如果修飾類,那麼該類就是抽象類
-
抽象類中可以沒有抽象方法,但是有抽象方法的類一定要宣告為抽象類
-
抽象類不能使用new關鍵字來建立物件,它是用來讓子類繼承的(約束)
-
抽象方法,只有方法的宣告,沒有方法的實現,它是用來讓子類實現的
-
子類繼承抽象類,那麼就必須要實現抽象類沒有實現的抽象方法,否則該子類也要宣告為抽象類
public abstract
介面(interface)
-
普通類:只有具體實現——(有構造方法)
-
抽象類:具體實現和規範(抽象方法)都有——(有構造方法)
-
介面:只有規範,自己無法寫方法——(沒有構造方法)
介面就是規範,定義的一組規則,體現了現實世界中“如果你是...你必須能...”的思想
介面的本質是契約
public static final