接口
概念:因為每個類隻有一個直接的父類,若一個類同時有兩個父類,如:帶橡皮的鉛筆
作用:
1.拓展功能
2.定義限制規範
3.程式的解耦(低耦合,高内聚)
定義格式:
interface 接口名 {
}
實作接口的格式:
class 類名 implement 接口{
}
接口注意的細節:
1.接口其實是特殊的類
2.接口中的成員變量都是屬于常量,預設的修飾符是public static final
3.接口中的方法都是抽象的方法,預設的修飾符是public abstract void
4.接口是不能用于建立對象的
5.接口沒有構造方法,接口的變量都是常量,接口的方法都是抽象的方法
6.如果一個非抽象類實作一個接口時,必須實作接口中的所有方法
接口與接口之間的關系
細節:
1. 一個接口是可以繼承多個接口的
接口與類之間的關系
1. 非抽象類實作一個接口時,必須要把接口中所有方法實作
2. 一個類可以實作多個接口
疑問:java支援多實作接口為什麼不能支援多繼承呢?
因為如果支援多繼承的話,那麼假設多個父類中有相同的成員,那麼子類就不知道到底用哪一個,但是接口隻需要使用實作的那一個即可
3. 抽象類實作接口的時候,可以實作接口中的方法,也可以不實作接口的方法
多态
概念:
父類的引用類型變量指向了子類的對象或者是接口的引用類型變量指向了接口實作類的對象(一個對象具有多種形态)
前提:
必須存在繼承或者實作關系
注意的細節:
1.多态情況下,子父類存在着同名的成員變量時,預設會通路父類的成員變量
2.多态情況下,子父類存在着同名的非靜态函數時,會預設通路子類的成員函數
3.多态情況下,子父類存在着同名的靜态函數時,會預設通路父類的成員函數
4.多态情況下,不能通路子類特有的成員
總結:
多态情況下,子父類存在同名的成員時,預設都是會通路父類的成員,隻有在非靜态函數下會通路子類的成員變量
應用場景
- 用于形式參數的時候,可以接收更多類型的參數
- 多态用于傳回值類型的時候,可以傳回多個類型
- 多态情況下,不能通路子類特有的成員
好處
- 提高拓展性