最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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 //僅在同一個(gè)文件中可見
 protected //同一個(gè)文件中或子類可見
 public //所有調(diào)用的地方都可見
 internal //同一個(gè)模塊中可見

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

可以聲明一個(gè)主構(gòu)造函數(shù)(primary constructor)和多個(gè)次級構(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è)構(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è)額外的無參構(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)的三個(gè)函數(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è)構(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è)構(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() // 編譯錯(cuò)誤
}

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

interface Reading{
  abstract fun reading()
}

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

相關(guān)文章

  • 10個(gè)Java程序員熟悉的面向?qū)ο笤O(shè)計(jì)原則

    10個(gè)Java程序員熟悉的面向?qū)ο笤O(shè)計(jì)原則

    這篇文章主要為大家詳細(xì)介紹了Java程序員應(yīng)當(dāng)知道的10個(gè)面向?qū)ο笤O(shè)計(jì)原則,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • 通過圖例了解PowerDesigner使用方法

    通過圖例了解PowerDesigner使用方法

    這篇文章主要介紹了通過圖例了解PowerDesigner使用方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • Spring MVC 請求處理流程步驟詳解

    Spring MVC 請求處理流程步驟詳解

    這篇文章主要介紹了Spring MVC 請求處理流程詳解,本文分步驟結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧
    2025-04-04
  • 基于IO版的用戶登錄注冊實(shí)例(Java)

    基于IO版的用戶登錄注冊實(shí)例(Java)

    下面小編就為大家?guī)硪黄贗O版的用戶登錄注冊實(shí)例(Java)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-09-09
  • 解析SpringBoot @EnableAutoConfiguration的使用

    解析SpringBoot @EnableAutoConfiguration的使用

    這篇文章主要介紹了解析SpringBoot @EnableAutoConfiguration的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • Java String的intern用法解析

    Java String的intern用法解析

    這篇文章主要介紹了Java String的intern用法解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • Java實(shí)現(xiàn)經(jīng)典角色扮演偵探游戲游戲的示例代碼

    Java實(shí)現(xiàn)經(jīng)典角色扮演偵探游戲游戲的示例代碼

    這篇文章主要介紹了如何利用Java語言自制一個(gè)偵探文字游戲—《角色扮演偵探》,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編學(xué)習(xí)一下
    2022-02-02
  • 通過Spring Boot整合Mybatis分析自動配置詳解

    通過Spring Boot整合Mybatis分析自動配置詳解

    這篇文章主要給大家介紹了關(guān)于如何通過Spring Boot整合Mybatis分析自動配置的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Spring Boot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • Java如何接收并解析HL7協(xié)議數(shù)據(jù)

    Java如何接收并解析HL7協(xié)議數(shù)據(jù)

    文章主要介紹了HL7協(xié)議及其在醫(yī)療行業(yè)中的應(yīng)用,詳細(xì)描述了如何配置環(huán)境、接收和解析數(shù)據(jù),以及與前端進(jìn)行交互的實(shí)現(xiàn)方法,文章還分享了使用7Edit工具進(jìn)行調(diào)試的經(jīng)驗(yàn),并記錄了一個(gè)常見的解析問題及其解決方法
    2024-12-12
  • Spring框架中@AliasFor注解詳細(xì)說明

    Spring框架中@AliasFor注解詳細(xì)說明

    這篇文章主要給大家介紹了關(guān)于Spring框架中@AliasFor注解詳細(xì)說明的相關(guān)資料,@AliasFor是Spring Framework中的一個(gè)注解,它用于指定注解屬性之間的別名關(guān)系,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-02-02

最新評論

通州区| 凉山| 苍梧县| 万州区| 环江| 额尔古纳市| 石棉县| 黄龙县| 阿克陶县| 漳浦县| 五指山市| 武宣县| 连州市| 绥滨县| 民县| 平遥县| 安龙县| 邓州市| 介休市| 来宾市| 苏尼特右旗| 桐乡市| 遵义市| 盘山县| 措美县| 昆山市| 汕头市| 拜城县| 九台市| 宣汉县| 大化| 黑山县| 花垣县| 武山县| 石嘴山市| 凌源市| 尉氏县| 宜阳县| 潮州市| 万州区| 洛浦县|