目錄
- java介面學習筆記
- 1. 抽象類和抽象方法
- 2. 介面
- 3. 抽象類和介面對比
- 參考
java介面學習筆記
1. 抽象類和抽象方法
抽象方法:abstract void f();
抽象類:包含抽象方法的類稱為抽象類,如果一個方法包含一個或多個抽象方法,則該類必須被定義為抽象類,否則編譯器會產生錯誤訊息,
示例:
public abstract class Basic {
abstract void unimplemented();
}
不允許使用private abstract修飾方法,因為這樣不能提供一個方法定義,
允許方法定義(和抽象方法可以混合使用),允許非靜態變數(在每個物件里都會被分配存盤),
抽象類的繼承:繼承抽象類的新型別,如果要生成自己的物件,則必須要為基類中的所有方法提供方法定義,否則,子類也是抽象的,編譯器強制你使用abstract關鍵字來限定這個子類,
2. 介面
介面通常暗示“類的型別”或作為形容詞來使用,例如Runnable或Serializable,而抽象類通常是類層次結構的一部分,并且是“事物的型別”,例如String,
abstract:默認不需要寫,編譯器會自動加上abstract,包括類和方法,
欄位:
- 隱式的
static和final,可以用來創建一組常量值; - 不能是空白的
final,但是可以用非常量運算式初始化,例如Random.nextInt()
@Override: 可以使用,防止意外多載,
默認方法:default關鍵字,實作該介面的類可以沿用,
JDK9+的版本中,介面里的static和default方法都可以是private的;
示例:
default void jim(){
System.out.println("jim2");
}
介面的多重繼承和多重實作:
- 使用方法簽名(方法名請和引數型別)來區分不同的方法,回傳型別不是簽名的一部分;
- 當方法簽名一致,但是內容不同的時候,必須重寫沖突的方法(多重
implements的時候處理方式相同); - 可以多重繼承介面;
public interface Jim1 {
void jim();
}
public interface Jim2 {
default void jim(){
System.out.println("jim2");
}
}
public interface Jim3 extends Jim1,Jim2{
@Override
default void jim() {
Jim1.super.jim();
}
}
public class Jim implements Jim1,Jim2{
@Override
public void jim() {
Jim2.super.jim();
}
}
介面作為引數的價值在于可以讓任何類都適應它,
嵌套介面:參照《On Java基礎卷》10.9
介面的private方法:始于JDK9,private方法可以省略default關鍵字,編譯器會加上,
新特性:密封類和密封介面,始于JDK17,可以用來限制實作的類,主要用于Java模式匹配(JDK17新特性);
3. 抽象類和介面對比
| 特性 | 介面 | 抽象類 |
|---|---|---|
| 組合 | 可以在新類中組合多個介面 | 只能繼承一個抽象類 |
| 狀態 | 不能包含欄位(靜態欄位除外,但他們不支持物件狀態) | 可以包含欄位,非抽象方法可以參考這些欄位 |
| 默認方法和抽象方法 | 默認方法不需要在子型別里實作,他只能參考介面里的方法(欄位不行) | 抽象放合法必須在子型別里實作 |
| 構造器 | 不能有構造器 | 可以有構造器 |
| 訪問權限控制 | 隱式的public |
可以為protected或包訪問權限 |
參考
[1] 《On Java 基礎卷》
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/546945.html
標籤:Java
