Kotlin 創(chuàng)建接口或者抽象類的匿名對象實例
一 ,定義接口和抽象類
interface IPerson{
//獲取名字
fun getName():String
//獲取身份證ID
fun getID():String
}
abstract class BaseAnimal{
abstract fun getVoice():String
}
二,創(chuàng)建對應(yīng)的匿名對象
object : IPerson {
override fun getName(): String = "jason"
override fun getID(): String = "00000123"
}
object : BaseAnimal() {
override fun getVoice() = "旺旺叫"
}
補充知識:android Kotlin 繼承、派生、接口、構(gòu)造方式,方法、屬性重寫
前言
kotlin 作為google官方android 開發(fā)語言,大勢所趨,據(jù)傳到2018底kotlin要全面替代java在android中的地位,其實這個也不擔(dān)心畢竟kotin和java可以100%互操作。兩種語言進行編寫也是可以的。
Kotlin 繼承
1.使用 open 關(guān)鍵字進行修飾
2.主構(gòu)造函數(shù)緊跟著在類后面聲明的函數(shù)
open class Person(var name : String, var age : Int){// 基類
}
class Student(name : String, age : Int, var no : String, var score : Int) : Person(name, age) {
}
// 二級構(gòu)造函數(shù)
calss Student : Person {
constructor(ctx: Context) : super(ctx) {
}
constructor(ctx: Context, attrs: AttributeSet) : super(ctx,attrs) {
}
}
另一種寫法,基類構(gòu)造函數(shù),次級構(gòu)造函數(shù)
/**用戶基類**/
open class Person(name:String){
/**次級構(gòu)造函數(shù)**/
constructor(name:String,age:Int):this(name){
//初始化
println("-------基類次級構(gòu)造函數(shù)---------")
}
}
/**子類繼承 Person 類**/
class Student:Person{
/**次級構(gòu)造函數(shù)**/
constructor(name:String,age:Int,no:String,score:Int):super(name,age){
println("-------繼承類次級構(gòu)造函數(shù)---------")
println("學(xué)生名: ${name}")
println("年齡: ${age}")
println("學(xué)生號: ${no}")
println("成績: ${score}")
}
}
fun main(args: Array<String>) {
var s = Student("Runoob", 18, "S12345", 89)
}
方法重寫
基類fun函數(shù)默認 final 修飾符,無法在子類進行重寫
需要加上 open 修飾符號
方法獲得,同名方法獲得
一個類從其他類或者接口(繼承實現(xiàn)來的方法),同名方法,在子類中必須顯示進行調(diào)用
open class A {
open fun f () { print("A") }
fun a() { print("a") }
}
interface B {
fun f() { print("B") } //接口的成員變量默認是 open 的
fun b() { print("b") }
}
class C() : A() , B{
override fun f() {
super<A>.f()//調(diào)用 A.f()
super<B>.f()//調(diào)用 B.f()
}
}
fun main(args: Array<String>) {
val c = C()
c.f();
}
open class A {
open fun f () { print("A") }
fun a() { print("a") }
}
interface B {
fun f() { print("B") } //接口的成員變量默認是 open 的
fun b() { print("b") }
}
class C() : A() , B{
override fun f() {
super<A>.f()//調(diào)用 A.f()
super<B>.f()//調(diào)用 B.f()
}
}
fun main(args: Array<String>) {
val c = C()
c.f();
}
屬性重寫
屬性重寫使用 override 關(guān)鍵字,屬性必須具有兼容類型,每一個聲明的屬性都可以通過初始化程序或者getter方法被重寫:
open class Foo {
open val x: Int get { …… }
}
class Bar1 : Foo() {
override val x: Int = ……
}
你可以用一個var屬性重寫一個val屬性,但是反過來不行。因為val屬性本身定義了getter方法,重寫為var屬性會在衍生類中額外聲明一個setter方法
你可以在主構(gòu)造函數(shù)中使用 override 關(guān)鍵字作為屬性聲明的一部分:
interface Foo {
val count: Int
}
class Bar1(override val count: Int) : Foo
class Bar2 : Foo {
override var count: Int = 0
}
Kotlin 接口
Kotlin 接口與 Java 8 類似,使用 interface 關(guān)鍵字定義接口,允許方法有默認實現(xiàn):
interface MyInterface {
fun bar() // 未實現(xiàn)
fun foo() { //已實現(xiàn)
// 可選的方法體
println("foo")
}
}
接口中的屬性
接口中的屬性只能是抽象的,不允許初始化值,接口不會保存屬性值,實現(xiàn)接口時,必須重寫屬性:
interface MyInterface{
var name:String //name 屬性, 抽象的
}
class MyImpl:MyInterface{
override var name: String = "runoob" //重載屬性
}
函數(shù)重寫
實現(xiàn)多個接口時,可能會遇到同一方法繼承多個實現(xiàn)的問題。例如:
實例
interface A {
fun foo() { print("A") } // 已實現(xiàn)
fun bar() // 未實現(xiàn),沒有方法體,是抽象的
}
interface B {
fun foo() { print("B") } // 已實現(xiàn)
fun bar() { print("bar") } // 已實現(xiàn)
}
class C : A {
override fun bar() { print("bar") } // 重寫
}
class D : A, B {
override fun foo() {
super<A>.foo()
super<B>.foo()
}
override fun bar() {
super<B>.bar()
}
}
fun main(args: Array<String>) {
val d = D()
d.foo();
d.bar();
}
輸出結(jié)果為:
ABbar
實例中接口 A 和 B 都定義了方法 foo() 和 bar(), 兩者都實現(xiàn)了 foo(), B 實現(xiàn)了 bar()。因為 C 是一個實現(xiàn)了 A 的具體類,所以必須要重寫 bar() 并實現(xiàn)這個抽象方法。
然而,如果我們從 A 和 B 派生 D,我們需要實現(xiàn)多個接口繼承的所有方法,并指明 D 應(yīng)該如何實現(xiàn)它們。
這一規(guī)則 既適用于繼承單個實現(xiàn)(bar())的方法也適用于繼承多個實現(xiàn)(foo())的方法。
以上這篇Kotlin 創(chuàng)建接口或者抽象類的匿名對象實例就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
詳解Android開發(fā)中Activity的四種launchMode
這篇文章主要介紹了Android開發(fā)中Activity的四種launchMode,launchMode主要用于控制多個Activity間的跳轉(zhuǎn),需要的朋友可以參考下2016-03-03
Android利用Intent實現(xiàn)記事本功能(NotePad)
這篇文章主要為大家詳細介紹了Android利用Intent實現(xiàn)簡單記事本功能(NotePad)的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-06-06
android 仿微信demo——注冊功能實現(xiàn)(服務(wù)端)
本篇文章主要介紹了微信小程序-閱讀小程序?qū)嵗?,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧,希望能給你們提供幫助2021-06-06
Android PopWindow 設(shè)置背景亮度的實例
這篇文章主要介紹了Android PopWindow 設(shè)置背景亮度的實例的相關(guān)資料,這里提供實現(xiàn)方法,希望能幫助有所需要的朋友,需要的朋友可以參考下2017-08-08
另外兩種Android沉浸式狀態(tài)欄實現(xiàn)思路
這篇文章主要為大家介紹了另外兩種Android沉浸式狀態(tài)欄實現(xiàn)思路,android5.0及以后版本都支持給狀態(tài)欄著色,而目前android主流版本還是4.4,想要深入了解的朋友可以參考一下2016-01-01

