一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|編程技術|正則表達式|C/C++|

服務器之家 - 編程語言 - JAVA教程 - kotlin基礎教程之類和繼承

kotlin基礎教程之類和繼承

2020-10-26 16:40Losileeya JAVA教程

這篇文章主要介紹了kotlin基礎教程之類和繼承的相關資料,需要的朋友可以參考下

kotlin基礎教程之繼承

類聲明

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

?
1
2
3
4
5
6
: modifiers ("class" | "interface") SimpleName
 typeParameters?
 primaryConstructor?
 (":" annotations delegationSpecifier{","})?
 typeConstraints
 (classBody? | enumClassBody)

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

?
1
class Empty

modifiers

包括 classModifieraccessModifier:

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

accessModifier: 訪問權限修飾符

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

構造函數聲明

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

primary constructor聲明

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

?
1
class User constructor(name:String)

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

?
1
class User(name:String)

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

?
1
class User

primary constructor 初始化

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

?
1
2
3
4
5
class User(name:String){
  init{
    //初始化.. 
  }
}

可以類中初始化屬性:

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

secondary constructor聲明

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

?
1
2
3
4
5
6
7
class User(name:String){
 
  /**secondary constructor**/
  constructor(name:String,age:Int):this(name){
    //初始化...
  }
}

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

?
1
class User(name:String = “”)

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

?
1
2
var user = User()
var anotherUser = User("jason")

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

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

實例化

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

?
1
var user = User()

繼承(Inheritance)

Any

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

?
1
2
3
equals()
hashCode()
toString()

繼承聲明

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

?
1
2
3
class Student(name:String,age:Int):User(name,age){
 
}

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/**用戶基類**/
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 關鍵詞:

?
1
2
3
4
5
6
7
8
9
10
open class User{
 
  open fun study(){}
 
  fun run(){}
}
 
class Student:User{
  override fun study(){}
}

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

?
1
final override fun study(){}

重載規則

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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方法,不需要調用所繼承的方法:

?
1
2
3
4
5
6
7
8
9
interface Reading{
  fun study()
}
 
class Student:User(),Reading{
  override fun study(){
    //do nothing
  }
}

抽象類

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

?
1
2
3
4
5
6
7
abstract class User{
  abstract fun study()
}
 
class Person{
  abstract fun study() // 編譯錯誤
}

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

?
1
2
3
interface Reading{
  abstract fun reading()
}

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 2022国产在线观看 | 蛮荒的童话未删减在线观看 | 调教催眠| 免费深夜福利 | 欧美生活一级片 | 波多野结衣中文字幕乱七八糟 | 国内久久久 | 日本加勒比在线精品视频 | 欧美日韩1区2区 | 国产精品久久久久久影院 | 手机国产乱子伦精品视频 | 91视频www| 国产综合亚洲专区在线 | 99热这里有精品 | 国产精品毛片久久久久久久 | 免费视频精品一区二区三区 | 下雨天小说词枝 | 国产精品国产三级在线专区 | 亚洲 无码 制服 日韩 | 狠狠婷婷综合缴情亚洲 | 日本免费一二区 | 国内精品久久久久久久 | 爱福利一区二区 | 九九在线免费视频 | 国色天香社区视频免费高清在线观看 | 热热影院| 青草视频在线观看视频 | 国产综合视频在线 | 国内自拍成人网在线视频 | 免费网站看v片在线香蕉 | 夫妇交换小说 | 日本在线观看www免费 | 99久久综合精品免费 | 色偷偷亚洲男人 | 色啪久久婷婷综合激情 | 91探花在线播放 | www亚洲色图 | 久久九九精品国产自在现线拍 | 2020韩国r级理论片在线观看 | 日韩精品视频在线观看免费 | 朝鲜美女免费一级毛片 |