面向對象第五天---三大特性之多態之接口
一、什麽是接口
1、接口時一套標準化的協議(必須要配套使用)。
2、接口的作用是:做數據交換
3、接口的關鍵字是:interface
語法: [訪問修飾符] 關鍵字interface 接口名{
接口裏面的屬性都是 pubic static final 默認修飾的常量
接口裏面的方法默認都是 public 抽象關鍵字abstract 修飾的方法();
}
使用:格式如:public class 類名 implements 接口名1,接口名2{};
4、接口是讓別的類用來調用的,所以通常接口的訪問修飾符是public。接口如果不寫訪問修飾符,其默認是public
5、接口是抽象訪問和常量值定義的集合(接口中的方法必須是抽象方法,接口定義的屬性必須是常量)
(1)接口中的方法默認訪問修飾符是public,並且是通過abstract進行修飾的抽象方法
(2)接口中屬性是公共靜態的常量,即接口中定義的屬性都會默認加上 public stati final 作為前綴
6、接口可以看作特殊的抽象類,只不過這個抽象類中全部都是公共的靜態常量,都是公共的抽象方法,比抽象類更加標準
7、jdk1.8之後的版本接口裏面是允許定義static修飾的方法、允許定義default修飾的方法
8、一個類可以實現多個接口,若兩個接口裏有default修飾的相同方法名的方法,此時實現類必須得覆寫default修飾的方法
二、接口的特性
1、實現接口的類必須實現接口中的抽象方法
2、多個類可以實現同一個接口
3、實現了接口的類可以被繼承
4、接口和接口之間是可以多繼承的。
5、接口和實現類的多態性:
6、接口和抽象類都遵循開閉原則(對修改關閉,對擴展開放)
三、接口和抽象類的區別
1、相同點:
(1)接口和抽象類都不能直接實例化,抽象類如果需要實例需要被繼承,之後通過抽象類的引用指向子類的實例對象(變相的創建了實例對象)
(2)抽象類裏的抽象方法必須全部被子類實現,如果子類不能全部實現父類的抽象方法,那麽該子類只能是抽象類;一個類實現接口的時候,如果不能全部實現接口中的方法,那麽這個類只能是抽象類。
(3)接口和抽象類都是用來抽象具體對象的,但是接口的抽象級別更高
(4)接口和抽象類都遵循開閉原則(對修改關閉,對擴展開放)
2、不同點:
(1)抽象類要被子類繼承;接口要被類實現
(2)抽象類中可以有非抽象方法;接口中除了static和default修飾的方法,其他全為抽象方法
(3)抽象類中可以有普通成員變量;接口中只能定義公共靜態常量
(4)抽象類是重構的結果;接口是設計的結果
(5)抽象類只可單繼承;接口可以多繼承
(6)抽象類可以有構造方法;接口不可以有構造方法
四、接口回調
1、接口回調是在開發中一種常用的設計手段,也可以當作一個處理問題的模型。運行接口的實現類實例的對象可以用接口類型的引用接收,調用時,用接口類型的引用名.方法名可以調用實現類中覆寫過的接口中的方法。這種方式叫做接口回調。
2、應用場景:分層間的互相協作
五、內部類
1、Java中支持一個類在一個類的內部再定義一個類,我們稱定義在一個類中的類為內部類或成員內部類(Inner Class)。
2、成員內部類
(1)成員內部類可以訪問外部類的所有成員變量和方法
(2)內部類屬於類,需要通過 類名.內部類 的方式得到這個類。
(3)成員內部類的創建方式
創建外部類的實例對象-->通過外部類訪問內部類創建內部的實例對象
InnerClass outClass = new InnerClass();
InnerClass.InnerClass1 b = outClass.new InnerClass1();
其中new InnerClass1() 是outClass類中的構造方法
(4)成員內部類是依附於外部類而存在的。如果要創建成員內部類對象,則必須得有一個外部類對象。
(5)成員內部類屬於外部類的成員,可以用priate修飾,但是只能在外部類內部進行訪問。修飾符對成員內部類的作用與普通的成員方法作用範圍相同。
3、局部內部類
(1)定義在一個方法或者一個作用域裏面的類,它和成員內部類的區別是:局部內部類的訪問權限僅限於方法或者作用域內
(2)局部內部類的訪問修飾符不能是public、protected、default、private 修飾的,也不能用static進行修飾
(3)局部內部類創建對象時,要放在局部內部類加載完之後(因為代碼的執行時從上到下的)
4、匿名內部類(重點:必須掌握)
(1)匿名內部類使用最多的場景時做事件監聽,使用匿名內部類可以使我們的代碼可維護性更高
(2)匿名內部類沒有引用指向,和匿名對象一樣只能使用一次
(3)可以實現抽象類裏的抽象方法
(4)接口也可以使用匿名內部類的方式去實現
(5)匿名內部類被我們大量使用在多線程中,因為我們線程實現的方式有繼承Thread類和實現Runnable接口兩種
(6)格式: new 類名/接口/抽象類(){
}
(7)本質:匿名內部類會隱式的繼承一個類或者實現一個接口,或者說,匿名內部類是一個繼承了該類或者實現了該類接口的子類匿名對象。
5、靜態內部類(重點:必須掌握)
(1)靜態內部類不依賴外部類
(2)靜態內部類創建對象
外部類.靜態內部類 引用名 = new 靜態內部列構造器();
(3)靜態內部類中不能使用外部類中非static修飾的成員變量和方法。
面向對象第五天---三大特性之多態之接口