成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Kotlin——繼承

開發 后端
在Kotlin中,實現繼承由以下規則控制:如果類從其直接超類繼承同一成員的多個實現,則它必須覆蓋該成員并提供自己的實現(可能使用其中一個繼承)。 要表示從其繼承的實現的超類型,可在尖括號中使用超類型名稱超級限定。

Kotlin——繼承

Kotlin中所有的類都有一個公有的超類:Any,這是所有沒有聲明超類的類的默認父類。

  1. class Example //隱式繼承自Any 

Any!=Java.lang.Object。尤其,除了equals()、hashCode()和toString()三個方法外,沒有任何成員。

為了顯式地聲明超類,語法如下:

  1. open class Base(p:Int
  2.  
  3. class Derived(p:Int):Base(p) 

 

如果類具有主構造器,則可以使用主構造器的參數(并且必須)初始化父類。

如果類沒有主構造器,那么每個輔助構造器初始化時需要使用super關鍵字,或者將其委托給其他構造器。需要注意的是,在這種情況下,不同的輔助構造器可以調用基類的不同構造器。

  1. class MyView:View
  2.  
  3. constructor(ctx:Context):super(ctx) 
  4.  
  5. constructor(ctx:Context,attrs:AttributeSet):super(ctx,attrs) 
  6.  

 

open注解和Java的final相反:它允許其他類繼承自該類。默認的,Kotlin中所有的類是final的,也就是說不能繼承的。

覆寫方法

Kotlin總是做一些明確的事情,不像Java,Kotlin要求復寫方法時需要顯式的注解和重寫:

  1. open class Base { 
  2.     open fun v() { 
  3.         println("Base.v()"
  4.     } 
  5.  
  6.     fun nv() { 
  7.         println("Base.nv"
  8.     } 
  9.  
  10.  
  11. class Derived() : Base() { 
  12.  
  13.     override fun v() { 
  14.         println("Derived.v()"
  15.     } 
  16.  

 

復寫Derived的v()時,ovverride注解是必須的,否則編譯器會報錯。如果沒有open注解,比如Base的nv(),那么在子類中是不能覆寫該方法的。在一個final類中(沒有open注解聲明),open成員是禁止的。也就是說final類的每個成員也都是final的。

一個標記為override的成員自身就是open的,子類仍然可以覆寫它。如果你想禁止覆寫,那么使用final

  1. open class AnotherDerived() : Base() { 
  2.     final override fun v() { 
  3.         println("AnotherDerived.v"
  4.     } 

 

***,main()驗證多態性:

  1. fun main(args: Array<String>) { 
  2.  
  3.     var base1: Base = Base() 
  4.     var base2: Base = Derived() 
  5.     var base3: Base = AnotherDerived() 
  6.  
  7.     base1.v() 
  8.     base2.v() 
  9.     base3.v() 
  10.  

 

覆寫屬性

覆寫屬性和覆寫方法基本類似;如果子類要重新聲明父類中已經聲明過的屬性,那么需要使用override,并且類型要兼容。每個聲明的屬性可以被具有初始化器的屬性或具有getter方法的屬性覆蓋。

  1. open class Foo { 
  2.     open val x: Int 
  3.         get() { 
  4.             println("Foo"
  5.             return 3 
  6.         } 
  7.  
  8. class Bar1 : Foo() { 
  9.     override val x: Int = 2 

 

可以使用var屬性覆蓋val屬性,反之不可以。因為val屬性基本上聲明一個getter方法,并將其替換為var,另外在派生類中聲明一個setter方法。

可以在主構造器使用override覆蓋屬性

  1. interface Aoo { 
  2.     val countInt 
  3.  
  4. class Aoo1(override val countInt) : Aoo 
  5.  
  6. class Aoo2 : Aoo { 
  7.     override var countInt = 0 

 

覆寫準則

在Kotlin中,實現繼承由以下規則控制:如果類從其直接超類繼承同一成員的多個實現,則它必須覆蓋該成員并提供自己的實現(可能使用其中一個繼承)。 要表示從其繼承的實現的超類型,可在尖括號中使用超類型名稱超級限定,例如,super。

  1. open class A { 
  2.     open fun f() { 
  3.         println("A"
  4.     } 
  5.  
  6.     fun a() { 
  7.         println("a"
  8.     } 
  9.  
  10.  
  11. //接口的方法默認open 
  12. interface B { 
  13.     fun f() { 
  14.         println("B"
  15.     } 
  16.  
  17.     fun b() { 
  18.         println("b"
  19.     } 
  20.  
  21.  
  22. class C() : A(), B { 
  23.     override fun f() { 
  24.         super<A>.f() 
  25.         super<B>.f() 
  26.         println("C"
  27.     } 

 

上面的代碼繼承自A和B是沒有問題的,a()和b()因為C知道繼承自哪一個類。但是對于f(),我們有兩個繼承,所以我們需要覆寫f(),并且需要提供我們的實現來消除歧義。

總結

Kotlin中的類默認是final的,如果需要子類繼承,需要使用open修飾;

Kotlin中的方法默認是不允許復寫的,只有用open修飾時,子類才可以進行覆寫,并且需要使用override進行顯示標注

屬性也支持覆寫 

責任編輯:龐桂玉 來源: Android開發中文站
相關推薦

2017-05-19 18:01:04

GoogleKotlin數據

2022-02-28 10:38:13

Kotlin插件Android

2009-07-14 17:36:28

Jython的繼承

2018-06-05 10:30:28

KotlinJava語言

2011-08-24 13:56:27

JavaScript

2018-01-03 11:51:06

KotlinTipsJava

2011-08-31 14:48:33

JavaScript

2011-07-07 13:39:14

Cocoa 框架

2012-02-02 16:13:29

HibernateJava

2012-02-14 09:45:02

JavaScript

2023-10-24 19:37:34

協程Java

2024-01-08 09:00:00

開發DSLKotlin

2011-03-10 14:19:56

JavaScript

2021-12-04 11:17:32

Javascript繼承編程

2009-07-02 09:40:14

Hibernate的繼

2017-10-20 10:19:49

Kotlin語言陷阱

2017-06-14 17:50:44

Kotlin寫法Java

2018-05-15 16:12:59

Kotlin擴展XxxUtils

2020-09-30 06:47:22

Kotlin機制

2017-07-05 17:50:52

KotlinJava程序員
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品久久久久久久久久久 | 一区二区三区视频在线 | 成人在线视频观看 | 欧美在线小视频 | 欧美性久久| 一区二区三区四区在线视频 | 91中文字幕在线 | 国产免费让你躁在线视频 | 亚洲精品久久 | 精品欧美乱码久久久久久1区2区 | 福利视频网站 | 羞羞网站免费观看 | jizz中国日本| 久久精品视频播放 | 一区二区三区四区电影视频在线观看 | 亚洲精品日韩一区二区电影 | 特级黄一级播放 | 欧美一级在线观看 | www.色综合| 亚洲精彩视频在线观看 | 亚洲毛片在线观看 | 中文字幕亚洲视频 | 精品中文视频 | 成人h视频在线观看 | av在线一区二区三区 | 成人av电影在线 | 日韩在线播放视频 | 日韩精品免费在线观看 | 天天躁日日躁狠狠躁2018小说 | 九九久久久 | 91av视频在线免费观看 | 国产欧美久久一区二区三区 | 波多野结衣亚洲 | 久久久久精 | 99re视频精品| 自拍第一页 | 国产精品一区二区久久 | 99这里只有精品视频 | 久久高清 | 国产毛片久久久久久久久春天 | 国产精品看片 |