類的進(jìn)階

1.繼承

需要被繼承的類,類的方法,類的屬性都要加open關(guān)鍵字

// 父類沒(méi)有構(gòu)造需要的參數(shù)
open class Person(){
  var name:String = ""
  var age:Int = 0
}

class Student():Person(){
  var school:String = ""
}

// 父類有需要構(gòu)造的參數(shù)
open class Person(var name:String, var age:Int){
  open fun showInfo(){
    print("hello")
  }
}

class Student(var name:String, var age:Int, var school:String):Person(name, age){
  override fun showInfo(){
    print("hello student")
  }
}

2.抽象類 重寫(xiě) 重載

抽象類不能被實(shí)例化,需要子類去繼承然后實(shí)現(xiàn)抽象方法,所以也不需要加open關(guān)鍵字

abstract class News{
  var origin = "reporter"
  abstract var content:String
  abstract fun newsLength(): Int
}

class schoolNews:News(){
  override var content:String =""
  override fun newsLength():Int = content.length
}

重載:不同參數(shù)個(gè)數(shù)的重載
重寫(xiě):子類繼承父類,重寫(xiě)父類的方法

3.接口interface

接口也不需要加open關(guān)鍵字

interface USB{
  fun add()
  fun remove()
}

class Computer:USB{
  override fun add(){
    print("add")
  }
  override fun remove(){
    print("remove")
  }
}

補(bǔ)充

屬性代理
// 屬性代理就是將屬性的get set都轉(zhuǎn)移到定義的by后面的類里面
// 如果屬性val需要實(shí)現(xiàn)一個(gè)操作符getValue()方法,如果屬性是var的話,就要實(shí)現(xiàn)getValue()和setValue()方法
class delegates{
  val name by lazy{
    "minger"
  }
}
// lazy 和 lateinit都是延遲初始化
// lazy只能用在val上,lateinit只能用在var上
// lateinit不能用在可空類型和java基本類型上
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容