Android?Kotlin全面詳細(xì)類使用語(yǔ)法學(xué)習(xí)指南
前言
Kotlin被Google官方認(rèn)為是Android開發(fā)的一級(jí)編程語(yǔ)言

今天,我將主要講解kotlin中的類的所有知識(shí),主要內(nèi)容包括如下:

1. 類的聲明 & 實(shí)例化
// 格式
class 類名(參數(shù)名1:參數(shù)類型,參數(shù)名2:參數(shù)類型...){
// to do
}
// 示例
class User(userName: String, age: Int){
// to do
}
// 實(shí)例化
// Kotlin沒有new關(guān)鍵字,所以直接創(chuàng)建類的實(shí)例(無(wú)參情況 & 有參):
var user = User()
var user = User("ABC" , 123)
// 額外說(shuō)明:Kotlin支持默認(rèn)參數(shù)
// 即在調(diào)用函數(shù)時(shí)可不指定參數(shù),則使用默認(rèn)函數(shù)
class User(userName: String = "hjc", age: Int = 26){
// to do
}
// 在實(shí)例化類時(shí)不傳入?yún)?shù),userName默認(rèn) = hjc,age默認(rèn) = 26
var user = User()
// 在設(shè)置默認(rèn)值后,若不想用默認(rèn)值可在創(chuàng)建實(shí)例時(shí)傳入?yún)?shù)
var user = User("ABC" , 123)
// 注:命名參數(shù)
若一個(gè)默認(rèn)參數(shù)在一個(gè)無(wú)默認(rèn)值的參數(shù)前,那么該默認(rèn)值只能通過(guò)使用命名參數(shù)調(diào)用該函數(shù)來(lái)使用
class User(userName: String = "hjc", age: Int){
// to do
}
var user = User(age = 26)對(duì)于構(gòu)造函數(shù),Kotlin中類可有一個(gè)主構(gòu)造函數(shù) & 多個(gè)次構(gòu)造函數(shù),下面將詳細(xì)說(shuō)明。
2. 構(gòu)造函數(shù)
2.1 主構(gòu)造函數(shù)
- 屬于類頭的一部分 = 跟在類名后,采用 constructor 關(guān)鍵字
- 不能包含任何的代碼。初始化的代碼放到以 init 關(guān)鍵字作為前綴的代碼塊中
class 類名 constructor(參數(shù)名:參數(shù)類型){
init {
//...
}
}
// 示例
class User constructor(userName: String) {
init {
//...
}
}
// 注:若主構(gòu)造函數(shù)無(wú)任何注解 / 可見性修飾符,可省略 constructor 關(guān)鍵字
class 類名(參數(shù)名:參數(shù)類型){
init {
//...
}
}
// 示例
class User (userName: String) {
init {
//...
}
}2.2 次構(gòu)造函數(shù)
- 必須加constructor關(guān)鍵字
- 一個(gè)類中可存在多個(gè)次構(gòu)造函數(shù),傳入?yún)?shù)不同
// 形式
constructor(參數(shù)名:參數(shù)類型) :{函數(shù)體}
// 示例
class User(userName: String) {
// 主構(gòu)造函數(shù)
init {
println(userName)
}
// 次構(gòu)造函數(shù)1:可通過(guò)this調(diào)主構(gòu)造函數(shù)
constructor() : this("hjc")
// 次構(gòu)造函數(shù)2:可通過(guò)this調(diào)主構(gòu)造函數(shù)
constructor(age: Int) : this("hjc") {
println(age)
}
// 次構(gòu)造函數(shù)3:通過(guò)this調(diào)主構(gòu)造函數(shù)
constructor(sex: String, age: Int) : this("hjc") {
println("$sex$age")
}
}
// 實(shí)例化類
User("hjc") // 調(diào)用主構(gòu)造函數(shù)
User() // 調(diào)用次構(gòu)造函數(shù)1
User(2) // 調(diào)用次構(gòu)造函數(shù)2
User("male",26) // 調(diào)用次構(gòu)造函數(shù)33. 類的屬性
Kotlin的類可以擁有屬性:關(guān)鍵字var(讀寫) / 關(guān)鍵字val(只讀)
class User {
var userName: String
val sex: String = "男"
}
// 使用屬性 = 名稱 + 引用
User().sex // 使用該屬性 = Java的getter方法
User().userName = "hjc" // 設(shè)置該屬性 = Java的setter方法4. 可見性修飾符

5. 繼承 & 重寫
- 類似于Java,Kotlin是單繼承 = 只有一個(gè)父類
- 區(qū)別:Kotlin使用冒號(hào)“ : ”繼承 & 默認(rèn)不允許繼承(若想讓類可被繼承,需用open關(guān)鍵字來(lái)標(biāo)識(shí))
// 用open關(guān)鍵字標(biāo)識(shí)該類允許被繼承 open class Food // 類Fruits繼承類Food class Fruits : Food()
- 對(duì)于子類重寫父類的方法,在Kotlin中,方法也是默認(rèn)不可重寫的
- 若子類要重寫父類中的方法,則需在父類的方法前面加open關(guān)鍵字,然后在子類重寫的方法前加override關(guān)鍵字
// 父類
// 在類 & 方法前都加了關(guān)鍵字open,為了被繼承 & 方法重寫
open class Food {
open fun banana() {}
}
// 子類
class Fruits : Food(){
// 重寫了父類的方法
override fun banana() {
super.banana()
}
}6. 特殊類
下面將講解一些特殊的類:
- 嵌套類(內(nèi)部類)
- 接口
- 數(shù)據(jù)類
- 枚舉類
6.1 嵌套類(內(nèi)部類)
/**
* 1. 嵌套類(內(nèi)部類)
* 標(biāo)識(shí):關(guān)鍵字inner
* 使用:通過(guò)外部類的實(shí)例調(diào)用嵌套類
*/
class User {
var age: Int = 0
inner class UserName {
}
}
var userName: User.UserName = User().UserName()6.2 接口
/**
* 2. 接口
* 標(biāo)識(shí):關(guān)鍵字interface
*/
// 聲明
interface A{}
interface B{}
// 方法體
// 接口中的方法可以有默認(rèn)方法體,有默認(rèn)方法體的方法可不重寫
// 區(qū)別于Java:Java不支持接口里的方法有方法體。
interface UserImpl{
fun getName(): String // 無(wú)默認(rèn)方法體,必須重寫
fun getAge(): Int{ // 有默認(rèn)方法體,可不重寫
return 22
}
}
// 實(shí)現(xiàn)接口UserImpl:需重寫getName() & 可不重寫getAge()
class User :UserImpl{
override fun getName(): String {
return "hjc"
}
}
// 實(shí)現(xiàn)接口:冒號(hào):
class Food : A, B {} // Kotlin是多實(shí)現(xiàn)
class Fruits: Food,A, B {} // 繼承 + 實(shí)現(xiàn)接口6.3 數(shù)據(jù)類
/**
* 3. 數(shù)據(jù)類
* 作用:保存數(shù)據(jù)
* 標(biāo)識(shí):關(guān)鍵字data
*/
// 使用:創(chuàng)建類時(shí)會(huì)自動(dòng)創(chuàng)建以下方法:
// 1. getter/setter方法;
// 2. equals() / hashCode() 對(duì);
// 3. toString() :輸出"類名(參數(shù)+參數(shù)值)";
// 4. copy() 函數(shù):復(fù)制一個(gè)對(duì)象&改變它的一些屬性,但其余部分保持不變
// 示例:
// 聲明1個(gè)數(shù)據(jù)類
data class User(var userName: String, var age: Int)
// copy函數(shù)使用
var user = User("hjc",26)
var user1 = user.copy(age = 30)
// 輸出user1.toString(),結(jié)果是:User(userName=hjc,age=30)
// 特別注意
// 1. 主構(gòu)造方法至少要有一個(gè)參數(shù),且參數(shù)必須標(biāo)記為val或var
// 2. 數(shù)據(jù)類不能用open、abstract、sealed(封閉類)、inner標(biāo)識(shí)6.4 枚舉類
/**
* 4. 枚舉類
* 標(biāo)識(shí):關(guān)鍵字enum
*/
// 定義
enum class Color {
RED, GREEN, BLUE
}
// 為枚舉類指定值
enum class Color(rgb: Int) {
RED(0xFF0000), GREEN(0x00FF00), BLUE(0x0000FF)
}總結(jié)
本文全面介紹了Kotlin語(yǔ)法中的類,更多關(guān)于Android Kotlin類語(yǔ)法的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Android Retrofit2網(wǎng)路編程實(shí)現(xiàn)方法詳解
這篇文章主要介紹了Android Retrofit2網(wǎng)路編程實(shí)現(xiàn)方法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-12-12
基于Android實(shí)現(xiàn)顏色漸變動(dòng)畫效果
本文主要給大家介紹了Android實(shí)現(xiàn)顏色漸變動(dòng)畫效果,實(shí)現(xiàn)這樣的一個(gè)動(dòng)畫漸變的效果很簡(jiǎn)單,只需要兩步,第一步用GradientDrawable實(shí)現(xiàn)兩個(gè)顏色之間的漸變效果,第二步用屬性動(dòng)畫實(shí)現(xiàn)顏色變化的過(guò)程,需要的朋友可以參考下2024-01-01
Android?ViewPager2?+?Fragment?聯(lián)動(dòng)效果的實(shí)現(xiàn)思路
這篇文章主要介紹了Android?ViewPager2?+?Fragment?聯(lián)動(dòng),本篇主要介紹一下 ViewPager2 + Fragment聯(lián)動(dòng)效果的實(shí)現(xiàn)思路,需要的朋友可以參考下2022-12-12
Android 7.0調(diào)用相機(jī)崩潰詳解及解決辦法
這篇文章主要介紹了 Android 7.0調(diào)用相機(jī)崩潰詳解及解決辦法的相關(guān)資料,需要的朋友可以參考下2016-12-12
Android編程之非調(diào)用系統(tǒng)界面實(shí)現(xiàn)發(fā)送彩信的方法(MMS)
這篇文章主要介紹了Android編程之非調(diào)用系統(tǒng)界面實(shí)現(xiàn)發(fā)送彩信的方法,涉及Android源碼中的mms的使用技巧,需要的朋友可以參考下2016-01-01
Flutter質(zhì)感設(shè)計(jì)之表單輸入
這篇文章主要為大家詳細(xì)介紹了Flutter質(zhì)感設(shè)計(jì)之表單輸入,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-08-08
Android編程之Application設(shè)置全局變量及傳值用法實(shí)例分析
這篇文章主要介紹了Android編程之Application設(shè)置全局變量及傳值用法,結(jié)合實(shí)例形式較為詳細(xì)的分析了全局變量及傳值的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-12-12
Android最基本的異步網(wǎng)絡(luò)請(qǐng)求框架
這篇文章主要為大家詳細(xì)介紹了Android最基本的異步網(wǎng)絡(luò)請(qǐng)求框架,感興趣的小伙伴們可以參考一下2016-04-04

