當前位置:成語大全網 - 書法字典 - 科特林抽象類和接口。

科特林抽象類和接口。

與Java壹樣,抽象關鍵字用於聲明Kotlin中的抽象類。無法實例化抽象類(無法創建抽象類的對象)。但是,您可以從它們繼承子類。

抽象類的成員(屬性和方法)不是抽象的,除非您使用abstract關鍵字顯式抽象它們。讓我們舉個例子:

這裏,

註意:抽象類總是開放的。您不需要顯式使用open關鍵字來繼承它們的子類。

運行該程序時,輸出是:

在這裏,教師類是從抽象類Person派生出來的。

教師類的對象jack被實例化。當我們創建主構造函數時,我們將“傑克·史密斯”作為參數傳遞給它。這將執行Person類的初始化塊。

然後,使用Jack對象調用displayJob()方法。請註意,displayJob()方法在基類中被聲明為抽象方法,並在派生類中被重寫。

最後,使用Jack對象調用displaySSN()方法。這個方法是非抽象的,並且是在Person類中聲明的(不是在Teacher類中)。

Kotlin接口類似於Java 8中的接口。它們可以包括抽象方法的定義和非抽象方法的實現。但是,它們不能包含任何狀態。

也就是說,接口可以有屬性,但它必須是抽象的或者必須提供訪問器實現。

推薦閱讀:科特林抽象課

Kotlin中的抽象類類似於接口,但有壹個重要的區別。抽象類的屬性不必是抽象的,也不必由訪問器實現。

關鍵字interface用於定義Kotlin中的接口。舉個例子,

這裏,

這是類或對象實現接口的方式:

這裏,InterfaceImp類實現了MyInterface接口。

該類覆蓋接口的抽象成員(test屬性和foo()方法)。

運行該程序時,輸出是:

如前所述,接口還可以具有提供訪問器實現的屬性。舉個例子,

運行該程序時,輸出是:

這裏,prop不是抽象的,但它在接口中是有效的,因為它提供了訪問器的實現。

但是,您不能在接口內部執行類似val prop:Int = 23的操作。

Kotlin不允許真正的多重繼承。但是,壹個類中可以實現兩個或更多接口。舉個例子,

運行該程序時,輸出是:

解決重寫沖突(多接口)

假設兩個接口(A和B)具有同名的非抽象方法(假設callMe()方法)。妳在壹個類中實現這兩個接口(假設是C語言)。現在,如果用C類的對象調用callMe()方法,編譯器將拋出錯誤。例如

這是引發的錯誤:

要解決這個問題,您需要提供自己的實現。這是如何做到的:

現在,當您運行該程序時,輸出將是:

這裏,C類中提供了callMe()方法的顯式實現。

超級語句