91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

深入淺析kotlin中的繼承與類

發布時間:2020-11-20 15:42:39 來源:億速云 閱讀:159 作者:Leah 欄目:編程語言

深入淺析kotlin中的繼承與類?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

kotlin基礎教程之類和繼承

類聲明

使用class關鍵字聲明類,查看其聲明格式:

: modifiers ("class" | "interface") SimpleName
 typeParameters?
 primaryConstructor?
 (":" annotations delegationSpecifier{","})?
 typeConstraints
 (classBody? | enumClassBody)

最簡略的類聲明至少包括 modifiers class SimpleName,如:

class Empty

modifiers

包括 classModifieraccessModifier:

classModifier: 類屬性修飾符,標示類本身特性。
 abstract //抽象類標示 
 final //標示類不可繼承,默認屬性
 enum //標示類為枚舉
 open //類可繼承,類默認是final的
 annotation //注解類

accessModifier: 訪問權限修飾符

 private //僅在同一個文件中可見
 protected //同一個文件中或子類可見
 public //所有調用的地方都可見
 internal //同一個模塊中可見

構造函數聲明

可以聲明一個主構造函數(primary constructor)和多個次級構造函數(secondary constructor),二者都是可選的。

primary constructor聲明

作為類聲明的頭部存在,類聲明結構:

class User constructor(name:String)

當constructor前無修飾符(如:private)時,constructor可以省略:

class User(name:String)

當是無參構造函數時,整個構造函數部分也可以省略,省略的構造函數默認是public的:

class User

primary constructor 初始化

由于primary constructor不能包含任何代碼,因此使用 init 代碼塊對其初始化,同時可以在初始化代碼塊中使用構造函數的參數:

class User(name:String){
  init{
    //初始化..  
  }
}

可以類中初始化屬性:

class User(name:String){
  var customName = name.toUpperCase() //初始化屬性
}

secondary constructor聲明

使用constructor前綴聲明,且必須調用primary constructor,使用this關鍵字:

class User(name:String){

  /**secondary constructor**/
  constructor(name:String,age:Int):this(name){
    //初始化...
  }
}

聲明構造函數時,允許指定參數默認值,若所有參數都被指定默認值然后編譯,編譯器會生成一個額外的無參構造函數來使用初始化屬性為初始值。

class User(name:String = “”)

作為校驗,上述聲明方式允許如下調用:

var user = User()
var anotherUser = User("jason")

若構造函數中并非所有參數都有默認值,則不會生成默認無參構造函數:

class User(name:String = "",age = Int)
var user = User() //將無法編譯通過 
var anotherUser = User("jason",18) //合法聲明

實例化

無需new關鍵字,即可實例化對象:

var user = User()

繼承(Inheritance)

Any

所有類都繼承該類,提供默認的三個函數:

equals()
hashCode()
toString()

繼承聲明

在類的構造函數之后使用 : 標示繼承:

class Student(name:String,age:Int):User(name,age){

}

當類未聲明構造函數時,繼承其他類時,也不需要在primary constructor中顯示的聲明構造函數,必須在secondary constructor中顯示調用父類構造函數,若父類有多個構造函數,可選擇其一進行調用:

/**用戶基類**/
open class User(name:String){

  /**secondary constructor**/
  constructor(name:String,age:Int):this(name){
    //初始化
  }
}

/**子類繼承User類**/
class Student:User{

  /**構造函數**/
  constructor(name:String):super(name){

  }

  /**另外一個構造函數**/
  constructor(name:String,age:Int):super(name,age){

  }
}

所有類定義時默認是final屬性,不可被繼承。若需要繼承,使用open關鍵字進行修飾。

方法重載

方法默認是final的,不可被子類重載,若需要被重載,使用關鍵詞 open 進行修飾,子類重載方法使用 override 關鍵詞:

open class User{

  open fun study(){}

  fun run(){}
}

class Student:User{
  override fun study(){}
}

override修飾的方法,默認是可以被繼承的。若希望不被繼承,可以使用 final 關鍵詞修飾。

final override fun study(){}

重載規則

當類同時繼承類和實現接口,且有相同方法,且相同方法都有實現時,需要在重載方法中調用所繼承的方法,使用關鍵詞 super ,T表示所繼承或實現的接口:

open class User{
  open fun study(){}
}

interface Reading{
  fun study(){}
}

class Student:User(),Reading{
  override fun study(){
    super<User>.study() 
    super<Reading>.study() //與上者至少二選其一
  }
}

當接口未實現方法時,默認為父類User的study方法,不需要調用所繼承的方法:

interface Reading{
  fun study()
}

class Student:User(),Reading{
  override fun study(){
    //do nothing
  }
}

抽象類

Kotlin中的抽象類允許有abstract修飾的成員方法,非抽象類不允許有抽象方法;

abstract class User{
  abstract fun study()
}

class Person{
  abstract fun study() // 編譯錯誤
}

抽象類默認是可被繼承的,接口是特殊的抽象類,允許有抽象方法:

interface Reading{
  abstract fun reading()
}

看完上述內容,你們掌握深入淺析kotlin中的繼承與類的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

广东省| 金川县| 紫云| 北宁市| 丰镇市| 图木舒克市| 海城市| 拉萨市| 平阳县| 红桥区| 太康县| 和林格尔县| 秀山| 神池县| 洪雅县| 奉贤区| 丹寨县| 建始县| 微博| 利津县| 南丹县| 奇台县| 大石桥市| 河北区| 长丰县| 大悟县| 东源县| 广宁县| 嫩江县| 黑河市| 土默特右旗| 乾安县| 靖边县| 遂平县| 温泉县| 八宿县| 潍坊市| 比如县| 西丰县| 郯城县| 德庆县|