文章目錄
- 聲明定義抽象類
- 聲明定義接口
- 派生類、抽象類、接口的繼承要點
聲明定義抽象類
public abstract class CRMSystem {
public abstract Client add(Client newGuy); //添加使用者方法
public abstract Event add(Event e, Client guy); //重載添加事件、使用者方法
public abstract Event[] todayEvents(); //今日事件方法
}
說明:
1.抽象類有構造器
2.接口和抽象類不能執行個體化
3.抽象方法所在的類必須是抽象類(接口是純抽象類)
4.變量不存在抽象的概念
5.抽象類可以隻有抽象方法,沒具體方法
6.抽象類可以隻有具體方法,沒有抽象類,這樣設計的目的就是不讓調用者建立該類的執行個體對象
7.抽象類的類體内容可以為空
8.聲明定義類的時候,類變量或者成員變量可以不要初始化(可以不賦初始值),建立對象的時候會自動初始化
9.方法内聲明的變量則必須初始化,否則會報編譯錯誤
10.抽象類中的抽象方法的通路權限修飾符可以是
public
、
protected
、
default
,但是不可以是
private
。若沒有指明通路權限修飾符,預設是
default
聲明定義接口
public interface CRMSystem {
Client add(Client newGuy);
Event add(Event e, Client guy);
Event[] todayEvents();
// 預設方法,用來更新接口
public default void myMethodDefault() {
...
}
}
說明:
1.接口中的變量,預設
public static final
,其實就是常量,而且必須指派
2.接中的方法一定是
public abstract
的(預設,可以不寫)
3.如果是 Java 8,還可以額外包含預設方法和靜态方法
public default 傳回值類型 方法名(參數清單) {方法體} // 預設方法,必須是public,預設是public
public static 傳回值類型 方法名(參數清單) {方法體} // 靜态方法,不可以是protected,預設是public
4.如果是 Java 9,還可以包含私用方法
private 傳回值類型 方法名(參數清單) {方法體} // 私有的普通方法
private static 傳回值類型 方法名(參數清單) {方法體} // 私有的靜态方法
5.不能通過實作類對象調用接口的靜态方法,特别注意了
6.接口不可以有靜态代碼塊和構造器
7.接口體的内容可以為空
派生類、抽象類、接口的繼承要點
1.一個類(不論是具體類還是抽象類)隻能繼承自一個類(不論是具體類還是抽象類),不可以同時繼承自多個類,換句話說一個類的直接父類隻能有一個,這叫單繼承
2.一個類可以多級繼承,例如,A 繼承自 B,B 繼承自 C
3.一個類可以同時實作多個接口
4.一個父類可以有多個子類,即不同的類可以繼承自同一個父類
5.接口可以繼承自(extends)另外一個接口,也可以同時繼承自多個接口
6.實作類如果繼承自(extends)一個抽象類,則必須實作抽象類中的全部抽象方法
7.實作類如果實作自(implements)一個接口,則必須實作接口中的全部抽象方法
8.如果聲明的是抽象類,繼承自(extends)一個抽象類,則可以實作部分的抽象方法,甚至都不實作也行
9. 如果聲明的是抽象類,實作自(implements)一個接口,則可以實作部分的抽象方法,且必須至少實作一個抽象方法;也可以全部實作,如果全部實作就必須自己聲明至少一個抽象方法才行
10.實作(implements)也是一種特殊的繼承關系
11.父類,又叫基類、超類;子類,又叫派生類
12.實作抽象方法,也可以了解為重寫(Override)方法
13.子類的成員方法無法直接通路父類的私域(private field)
14.一個實作類同時實作多個接口時,如果不同接口含有相同方法簽名的預設方法,實作類必須重寫沖突的預設方法
15.一個實作類同時實作多個接口時,如果不同接口含有相同方法簽名的抽象方法,實作類隻要實作其中一個抽象方法即可
16.一個實作類的直接父類和接口含有相同方法簽名的方法時,通過實作類對象調此方法,優先使用直接父類的方法
17.子類無法繼承父類的構造器
18.子類無法繼承父類的私有變量和私有方法(實際已經繼承了,隻是不可見而已)
19.子類不能繼承父類的靜态變量和靜态方法
20.子類隻能繼承父類的成員變量和成員方法