1. 程式人生 > >面向對象第五天---三大特性之多態之接口

面向對象第五天---三大特性之多態之接口

依賴 接口回調 bsp 靜態內部類 所有 創建 static 在外 thread類

一、什麽是接口

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修飾的成員變量和方法。

面向對象第五天---三大特性之多態之接口