標籤:代碼塊 指定 耦合 總結 ali java 隱式 介面 根據
在java物件導向編程的,抽象類別和介面始終存在有疑問的地方,因為兩者太多相似有太多不同,在剛開始學習的時候經常弄的不對,使用情景搞混,今天來總結之前學習Java中介面和抽象類別的問題。
抽象類別 瞭解:只聲明,未具體實現。
abstract void cry();
抽象方法必須使用關鍵字abstract進行修飾,如果一旦一個類中包含了abstract方法,那麼這個類必須使用abstract進行修飾;因為抽象類別中含有未實現的方法,抽象類別不能被執行個體化;抽象類別不一定包含抽象方法,也就是說抽象類別可以沒有抽象方法(那麼這個抽象類別為什麼要設計呢?);抽象方法不能存在方法體;抽象類別可以有實現了的方法當一類繼承的父類是抽象類別時,必須全部實現抽象類別的抽象方法。
對於一個父類,如果它的某個方法在父類中實現出來沒有任何意義,必鬚根據子類的實際需求來進行不同的實現,那麼就可以將這個方法聲明為abstract方法,此時這個類也就成為abstract類了。
包含抽象方法的類稱為抽象類別,但並不意味著抽象類別中只能有抽象方法,它和普通類一樣,同樣可以擁有成員變數和普通的成員方法。注意,抽象類別和普通類的主要有三點區別:
1)抽象方法必須為public或者protected(因為如果為private,則不能被子類繼承,子類便無法實現該方法),預設情況下預設為public。
2)抽象類別不能用來建立對象;
3)如果一個類繼承於一個抽象類別,則子類必須實現父類的抽象方法。如果子類沒有實現父類的抽象方法,則必須將子類也定義為為abstract類。
介面 設計思想:高內聚低耦合
[public] interface InterfaceName { }
使用implement關鍵字遵循介面:
class Animalimplements Interface1,Interface2,[....]{ }
當一類實現多個介面時,如果此類事非抽象類別那麼必須實現該介面的全部方法;原則:
當一類實現了一個介面,就要實現此介面的全部方法;
介面不能被執行個體化(正是由於介面的變數不能用private protected修飾,預設 public static final,而方法被隱式地指定為public abstract方法用其他關鍵字,比如private、protected、static、 final等修飾會報編譯錯誤))
介面中所有方法不能有方法體,也就是說必須是抽象方法;
定義在介面中的變數,作為全域變數使用:訪問形式 介面名.變數名。
介面不能繼承類,但是可以繼承其他的介面。
兩者對比
一個類只能單繼承一個抽象類別。但是一個類可以實現多個介面。
成員變數:抽象類別可以是任何類型,介面只能是public static final類型。
成員方法:抽象類別可以提供實現的方法體,介面中只能存在public abstract 方法。
靜態方法|代碼塊:介面中不存在,抽象類別可以有。
慢慢人生路,學點Jakarta基礎-深入剖析Java的介面和抽象類別