>[success] # java -- 接口
1. 如果一個**抽象類**沒有字段,**所有方法**全部都是**抽象方法**,此時就可以使用接口聲明,因此可以說,接口就是一種比抽象類還抽象的類,體現在所有方法都為抽象方法
2. 定義接口的關鍵字是**interface**
>[danger] ##### 接口特點
1. 里面變量只能是常量
2. 接口只能繼承接口
3. 接口可以多繼承
4. 不能有構造方法
5. 從**Java8**開始增加新特性,接口中允許出現**非抽象方法**和**靜態方法**,但**非抽象方法**需要使用**default**關鍵字修飾,原因之前定義的抽象方法如果實現接口的類非抽象類需要將所有的抽象方法都重寫,但并不是每一個抽象方法在繼承的類都有用到因此**default** 修飾的方法可以不用被重寫
6. 從**Java9**開始增加新特性,接口中允許**出現私有方法**
>[danger] ##### 定義接口
~~~
public interface ITest {
public static final int num= 1; // 變量只能是常量
int num1 =2 ; // 縮寫因為只能是常量因此定義常量 public static final 可以省略
public abstract int getNum(); // 定義抽象方法
int getNum1(); // 縮寫
public default void show1(){} // java8 開始允許定義為default方法在繼承時候不用重寫
public static void show2(){} // java8 開始允許定義靜態方法,接口不能被實現,靜態方法調用不用被實現符合接口
private void show(){} // 從Java9開始允許接口中出現私有方法
// --------出現java 私有方法方法------------
// 當多個默認方法有共同的邏輯時候,想做提取例如,提取一個 show3方法實際這樣
// show3 方法還會被其他方法重寫但show3 僅僅是共同邏輯此時就可以使用java9特性 私有方法
public default void show3(){
// ....重復邏輯
}
public default void show4(){
show3();
show(); // 更好
}
public default void show5(){
show3();
show(); // 更好
}
}
~~~
* 定義接口
~~~
public interface ITest1 {
}
~~~
* 接口多繼承,只需要重寫抽象方法
~~~
public class Test implements ITest,ITest1{
@Override
public int getNum() {
return 0;
}
@Override
public int getNum1() {
return 0;
}
}
~~~
* 使用
~~~
public class UseTest extends Test{
public static void main(String[] args) {
// 使用多態向上轉型
Test test= new UseTest();
// 使用多態向上轉型
ITest test1 = new UseTest();
}
}
~~~
* 如果抽象類實現接口可以不用將抽象方法都實現
~~~
public abstract class ATest implements ITest{
}
~~~
* 接口只能繼承接口
~~~
public interface ITest1 extends ITest{
}
~~~
>[success] # 類和接口之間的關系
| 名稱 | 關鍵字 | 關系 |
| --- | --- |--- |
| 類和類之間的關系 | 使用extends關鍵字表達繼承關系 | 支持單繼承 |
|類和接口之間的關系 |使用implements關鍵字表達實現關系 |支持多實現|
|接口和接口之間的關系| 使用extends關鍵字表達繼承關系 | 支持多繼承 |
>[success] # 抽象類和接口的主要區別
1. 定義抽象類的關鍵字是abstract class,而定義接口的關鍵字是interface
2. 繼承抽象類的關鍵字是extends,而實現接口的關鍵字是implements
3. 繼承抽象類支持單繼承,而實現接口支持多實現
4. 抽象類中可以有構造方法,而接口中不可以有構造方法
5. 抽象類中可以有成員變量,而接口中只可以有常量
6. 抽象類中可以有成員方法,而接口中只可以有抽象方法
7. 抽象類中增加方法時子類可以不用重寫,而接口中增加方法時實現類需要重寫(Java8以前的版本)
8. 從Java8開始增加新特性,接口中允許出現非抽象方法和靜態方法,但非抽象方法需要使用default關鍵字修飾
9. 從Java9開始增加新特性,接口中允許出現私有方法
- windows -- 環境變量
- Vscode -- 編寫java
- 初始java
- java -- 關鍵字
- 編寫第一個java程序
- java -- 注釋
- 計算機存儲 -- 進制
- java -- 類型
- java -- 變量
- 數字類型
- 布爾類型
- 字符類型
- 類型轉換
- 雙等比較是什么
- java -- 運算符
- 算數運算符
- 字符串拼接
- 關系/比較運算符
- 自增減運算符
- 邏輯運算符
- 三目運算
- 賦值運算符
- 移位運算符
- 位運算符
- 運算符優先級
- java -- 流程控制語句
- if /else if /if -- 判斷
- switch case分支結構
- for -- 循環
- 用雙重for循環
- while -- 循環
- do while -- 循環
- 案例練習
- java -- 數組
- 數組的存儲
- 數組的增刪改查
- 數組的特點
- 數組案例
- 二維數組
- 數組的工具方法
- java -- 方法
- java -- 方法的重載
- java -- 方法的調用流程
- java -- 類方法傳參注意事項
- java -- 方法練習案例
- 對比 return break continue
- for each循環
- java -- 基礎練習
- java -- 面向對象
- java -- 創建類和對象
- java -- 訪問控制符
- java -- 類成員方法
- java -- 構造方法
- java -- this
- java -- 封裝
- java -- 對象內存圖
- java -- 創建對象案例
- java -- static
- java -- 繼承
- super -- 關鍵字
- java -- 構造塊和靜態代碼塊
- java -- 重寫
- java -- final
- java -- 多態
- java -- 抽象類
- java -- 接口
- 引用類型數據轉換
- 綜合案例
- java -- 內部類
- java -- 回調模式
- java -- 枚舉類型
- java -- switch 使用枚舉
- java -- 枚舉方法使用
- java -- 枚舉類實現接口
- java -- javaBean
- java -- package 包
- java -- import
- java -- 遞歸練習
- java -- 設計模式
- 單例模式
- java -- 注解
- java -- 元注解
- Java -- 核心類庫
- java -- 處理字符串
- Java -- String
- String -- 常用方法
- String -- 正則
- Java -- StringBuilder 和 StringBuffer
- 知識點
- Java -- StringJoiner 字符串拼接
- 練習題
- 字符串的總結
- Java -- 包裝類
- Integer
- Double
- Boolean
- Character
- java -- 集合類
- java -- util.Collection
- Iterator接口
- java -- util.List
- java -- ArrayList
- java -- util.Queue
- java -- util.Set
- java -- util.Map
- java -- util.Collections
- Java -- Math
- Java -- java.lang
- Java -- Object
- Java -- 獲取當前時間戳
- Java -- 異常
- Java -- java.util
- java -- Date
- java -- Calender
- Java -- java.text
- Java -- SimpleDateFormat
- Java -- java.time
- Java -- java.io
- java -- io.File
- java -- 泛型
- IDEA -- 用法