激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

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

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()
}

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 色戒在线版 | 圆产精品久久久久久久久久久 | 久久国产精品二国产精品中国洋人 | 精品国产一区二区三区久久久蜜月 | 美女扒开胸罩给男生看视频 | 黄色免费电影网址 | 全视频tv| 久色成人网 | 成人福利视频在 | 正在播放91精 | 黄色片网站免费在线观看 | 日本黄色一级视频 | 国产1区2区在线观看 | 第四色成人网 | 性欧美日本 | 久久成人免费观看 | 91 视频网站 | 欧美成人一区二区三区电影 | 亚洲一区二区三区四区精品 | 男人久久天堂 | 99国产精品欲a | 一级毛片免费高清视频 | 少妇一级淫片免费放正片 | 澳门一级淫片免费视频 | 欧美日本一 | 新久草在线视频 | 91在线视频精品 | 亚洲男人一区 | 蜜桃久久一区二区三区 | 精品亚洲va在线va天堂资源站 | 91精品国产乱码久久桃 | 中文字幕在线观看视频www | 91精品国产91久久久久久 | 狠狠操在线观看 | 久草在线新时代视觉 | 欧美一区中文字幕 | 精品国产乱码久久久久久预案 | 欧美a∨一区二区三区久久黄 | 夜夜b | 免费一级毛片在线播放视频老 | 久久综合色区 |