欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

kotlin基礎(chǔ)教程之類和繼承

 更新時(shí)間:2017年05月23日 11:14:36   作者:Losileeya  
這篇文章主要介紹了kotlin基礎(chǔ)教程之類和繼承的相關(guān)資料,需要的朋友可以參考下

kotlin基礎(chǔ)教程之類和繼承

類聲明

使用class關(guān)鍵字聲明類,查看其聲明格式:

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

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

class Empty

modifiers

包括 classModifieraccessModifier:

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

accessModifier: 訪問權(quán)限修飾符

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

構(gòu)造函數(shù)聲明

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

primary constructor聲明

作為類聲明的頭部存在,類聲明結(jié)構(gòu):

class User constructor(name:String)

當(dāng)constructor前無修飾符(如:private)時(shí),constructor可以省略:

class User(name:String)

當(dāng)是無參構(gòu)造函數(shù)時(shí),整個構(gòu)造函數(shù)部分也可以省略,省略的構(gòu)造函數(shù)默認(rèn)是public的:

class User

primary constructor 初始化

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

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

可以類中初始化屬性:

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

secondary constructor聲明

使用constructor前綴聲明,且必須調(diào)用primary constructor,使用this關(guān)鍵字:

class User(name:String){

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

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

class User(name:String = “”)

作為校驗(yàn),上述聲明方式允許如下調(diào)用:

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

若構(gòu)造函數(shù)中并非所有參數(shù)都有默認(rèn)值,則不會生成默認(rèn)無參構(gòu)造函數(shù):

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

實(shí)例化

無需new關(guān)鍵字,即可實(shí)例化對象:

var user = User()

繼承(Inheritance)

Any

所有類都繼承該類,提供默認(rèn)的三個函數(shù):

equals()
hashCode()
toString()

繼承聲明

在類的構(gòu)造函數(shù)之后使用 : 標(biāo)示繼承:

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

}

當(dāng)類未聲明構(gòu)造函數(shù)時(shí),繼承其他類時(shí),也不需要在primary constructor中顯示的聲明構(gòu)造函數(shù),必須在secondary constructor中顯示調(diào)用父類構(gòu)造函數(shù),若父類有多個構(gòu)造函數(shù),可選擇其一進(jìn)行調(diào)用:

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

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

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

  /**構(gòu)造函數(shù)**/
  constructor(name:String):super(name){

  }

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

  }
}

所有類定義時(shí)默認(rèn)是final屬性,不可被繼承。若需要繼承,使用open關(guān)鍵字進(jìn)行修飾。

方法重載

方法默認(rèn)是final的,不可被子類重載,若需要被重載,使用關(guān)鍵詞 open 進(jìn)行修飾,子類重載方法使用 override 關(guān)鍵詞:

open class User{

  open fun study(){}

  fun run(){}
}

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

override修飾的方法,默認(rèn)是可以被繼承的。若希望不被繼承,可以使用 final 關(guān)鍵詞修飾。

final override fun study(){}

重載規(guī)則

當(dāng)類同時(shí)繼承類和實(shí)現(xiàn)接口,且有相同方法,且相同方法都有實(shí)現(xiàn)時(shí),需要在重載方法中調(diào)用所繼承的方法,使用關(guān)鍵詞 super ,T表示所繼承或?qū)崿F(xiàn)的接口:

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

interface Reading{
  fun study(){}
}

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

當(dāng)接口未實(shí)現(xiàn)方法時(shí),默認(rèn)為父類User的study方法,不需要調(diào)用所繼承的方法:

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() // 編譯錯誤
}

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

interface Reading{
  abstract fun reading()
}

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關(guān)文章

  • Spring Security添加二次認(rèn)證的項(xiàng)目實(shí)踐

    Spring Security添加二次認(rèn)證的項(xiàng)目實(shí)踐

    在用戶自動登錄后,可以通過對密碼進(jìn)行二次校驗(yàn)進(jìn)而確保用戶的真實(shí)性,本文就來介紹一下Spring Security添加二次認(rèn)證的項(xiàng)目實(shí)踐,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-12-12
  • Java中的Enum枚舉使用方法解析

    Java中的Enum枚舉使用方法解析

    這篇文章主要介紹了Java中的Enum枚舉使用方法解析,枚舉是一種數(shù)據(jù)類型,和int、double、string等類型相似,枚舉用于聲明一組命名的常數(shù),當(dāng)一個變量有幾種可能的取值時(shí),可以將它定義為枚舉類型,需要的朋友可以參考下
    2023-11-11
  • Java交換map的key和value值的步驟和代碼示例

    Java交換map的key和value值的步驟和代碼示例

    在Java中,我們都知道直接交換Map的key和value是不被允許的,因?yàn)镸ap的接口設(shè)計(jì)是基于key-value對的,其中key是唯一的,并且是不可變的,所以本文給大家介紹了Java交換map的key和value值的步驟和代碼示例,需要的朋友可以參考下
    2024-09-09
  • ReentrantReadWriteLock不能鎖升級的原因總結(jié)

    ReentrantReadWriteLock不能鎖升級的原因總結(jié)

    今天給大家?guī)淼氖顷P(guān)于Java并發(fā)的相關(guān)知識,文章圍繞著為什么ReentrantReadWriteLock不能鎖升級展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • SpringBoot集成thymeleaf渲染html模板的步驟詳解

    SpringBoot集成thymeleaf渲染html模板的步驟詳解

    這篇文章主要給大家詳細(xì)介紹了SpringBoot集成thymeleaf如何使實(shí)現(xiàn)html模板的渲染,文中有詳細(xì)的代碼示例,具有一定的參考價(jià)值,需要的朋友可以參考下
    2023-06-06
  • Java8通過Function獲取字段名的步驟

    Java8通過Function獲取字段名的步驟

    這篇文章主要介紹了Java8通過Function獲取字段名,需要的朋友可以參考下
    2020-04-04
  • 告訴你springboot各個文件夾的作用

    告訴你springboot各個文件夾的作用

    這篇文章主要介紹了springboot各個文件夾是干嘛的,本文通過截圖實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-08-08
  • java 實(shí)現(xiàn)漢諾塔詳解及實(shí)現(xiàn)代碼

    java 實(shí)現(xiàn)漢諾塔詳解及實(shí)現(xiàn)代碼

    這篇文章主要介紹了java 實(shí)現(xiàn)漢諾塔詳解及實(shí)現(xiàn)代碼的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • mybatis之多參數(shù)查詢方式

    mybatis之多參數(shù)查詢方式

    這篇文章主要介紹了mybatis之多參數(shù)查詢方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • springboot application.yml使用@@pom文件配置問題

    springboot application.yml使用@@pom文件配置問題

    這篇文章主要介紹了springboot application.yml使用@@pom文件配置問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07

最新評論