詳解Kotlin中的面向?qū)ο螅ǘ?/h1>
更新時(shí)間:2017年06月20日 10:10:20 投稿:lqh
這篇文章主要介紹了詳解Kotlin中的面向?qū)ο螅ǘ┑南嚓P(guān)資料,需要的朋友可以參考下
詳解Kotlin中的面向?qū)ο螅ǘ?/strong>
在Kotlin中的面向?qū)ο螅ㄒ唬?/a>中,介紹了Kotlin類的相關(guān)操作,本文將在上文的基礎(chǔ)上,繼續(xù)介紹屬性、接口等同樣重要的面向?qū)ο蟮墓δ堋?br />
屬性
class AttrDemo{
private var attr1 : String = "";
protected var attr2 : String = "";
public var attr3 : String = "";
var varattr : String = "";
val valattr : String = "";
var attr = 1;
}
屬性是每個(gè)對(duì)象中最基本的單位,也是必不可少的一部分,與Java一樣,Kotlin也提供了private、protected、public三種聲明變量的方式,不同的是,在Kotlin中如果沒聲明訪問權(quán)限,默認(rèn)認(rèn)為是public類型,即在其他任何地方都可以訪問。同時(shí),Kotlin提供了var和val用來表示屬性的讀寫權(quán)限,var是可讀寫的變量,val則是只讀變量,類似于Java中的final。
需要注意,Kotlin對(duì)于空安全的要求非常嚴(yán)格,所以對(duì)于所有的屬性都需要進(jìn)行初始化,因此也可以通過直接賦值的方式說明屬性的類型,不一定非在后面通過冒號(hào)的方式追加。不過對(duì)于習(xí)慣Java語法的開發(fā)者而言可能還是會(huì)注明屬性的類型,而習(xí)慣腳本語言的開發(fā)者可能會(huì)傾向于直接賦值。
在Kotlin中,get和set方法不是必須的,因?yàn)镵otlin會(huì)自動(dòng)對(duì)get和set方法進(jìn)行處理,變成直接調(diào)用屬性的方式(可參考Kotlin的第一行代碼中的說明),但Kotlin還是有自己獨(dú)特的使用get和set的方式
private var attr1 : String
get() = attr1.toString()
set(value) {
attr1 = value
}
protected var attr2 : String
get() {
//TODO GET
return attr2.toString()
}
set(value) {
attr2 = value
}
Kotlin提供了多種設(shè)置get和set的方法,上面的代碼中展示了兩種get方法和一種set方法,有時(shí)當(dāng)你希望改變get、set的訪問權(quán)限或是使用注解時(shí),也可以直接對(duì)get、set進(jìn)行操作
var attr4 : String = "" //一定要初始化
private set
接口
和Java類似,Kotlin使用interface作為接口的關(guān)鍵詞,和抽象類相比,他們都可以包含抽象的方法以及方法的實(shí)現(xiàn),但接口無法保存狀態(tài)。
interface mInterfaceDemo{
fun function1()
fun function2(){
}
}
和繼承的方式類似,實(shí)現(xiàn)接口也是使用冒號(hào)“:”,不過方法略有不同
class InterfaceDemoImpl : mInterfaceDemo{
override fun function1() {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
}
我們可以在接口中申明屬性,但接口中的屬性要么是抽象的,要么提供訪問器的實(shí)現(xiàn)。接口屬性不可以有后備字段,而且訪問器不可以引用它們。
泛型
泛型是程序設(shè)計(jì)語言的一種特性。允許程序員在強(qiáng)類型程序設(shè)計(jì)語言中編寫代碼時(shí)定義一些可變部分,那些部分在使用前必須作出指明。像 java 一樣,Kotlin 中的類可以擁有類型參數(shù)
class GenericDemo<T>(t : T){
var value = t
}
通常來說,我們需要這樣構(gòu)建一個(gè)對(duì)象
val generic: GenericDemo<Int> = GenericDemo<Int>(1)
但如果類型是需要推斷的,也可以通過傳入忽略類型的參數(shù)進(jìn)行創(chuàng)建
val generic = GenericDemo(1)
嵌套類
Kotlin中的類也可以嵌套在別的類中
class Outer {
private val bar: Int = 1
class Nested {
fun foo() = 2
}
}
可以通過inner修飾符增加一個(gè)對(duì)外部類的引用,使得內(nèi)部類可以調(diào)用外部類的屬性
class Outer {
private val bar: Int = 1
inner class Inner {
fun foo() = bar
}
}
val demo = Outer().Inner().foo() //==1
對(duì)于匿名內(nèi)部類,通過對(duì)象表達(dá)式進(jìn)行創(chuàng)建
mvp_button.setOnClickListener(object : View.OnClickListener{
override fun onClick(v: View?) {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
});
如果對(duì)象是函數(shù)式的 java 接口的實(shí)例(比如只有一個(gè)抽象方法的 java 接口),我們可以用一個(gè)帶接口類型的 lambda 表達(dá)式創(chuàng)建它。
mvp_button.setOnClickListener {
startActivity(Intent(MainActivity@this,MVPActivity::class.java))
}
枚舉類
枚舉類最基本的用法就是實(shí)現(xiàn)類型安全的枚舉,每個(gè)自舉常量都是一個(gè)對(duì)象。枚舉常量通過逗號(hào)分開。
enum class Direction {
EAST,NORTH,SOUTH,WEST
}
因?yàn)槊總€(gè)枚舉對(duì)象都是一個(gè)實(shí)例,所以我們可以對(duì)其進(jìn)行初始化
enum class Color(val rgb: Int) {
RED(0xFF0000),
GREEN(0x00FF00),
BLUE(0x0000FF)
}
當(dāng)我們需要調(diào)用枚舉對(duì)象的內(nèi)容時(shí),可以通過valueof獲取某個(gè)枚舉對(duì)象的值,或者通過values獲取所有枚舉對(duì)象
Direction.EAST
Direction.valueOf("EAST");
Direction.values()
需要注意,如果指定的名字在枚舉類中沒有任何匹配,那么valueOf()方法將會(huì)拋出參數(shù)異常
Kotlin中核面向?qū)ο笙嚓P(guān)的內(nèi)容就介紹到這里,相關(guān)的代碼均提交在github中,
本文源碼下載:http://xiazai.jb51.net/201706/yuanma/helloKotlin-master(jb51.net).rar
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
-
Java StringUtils字符串分割轉(zhuǎn)數(shù)組的實(shí)現(xiàn)
這篇文章主要介紹了Java StringUtils字符串分割轉(zhuǎn)數(shù)組的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧 2019-09-09
-
SpringBoot+easypoi實(shí)現(xiàn)數(shù)據(jù)的Excel導(dǎo)出
這篇文章主要為大家詳細(xì)介紹了SpringBoot+easypoi實(shí)現(xiàn)數(shù)據(jù)的Excel導(dǎo)出,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
2021-05-05
-
SpringBoot+kaptcha實(shí)現(xiàn)驗(yàn)證碼花式玩法詳解
這篇文章主要想和大家聊聊kaptcha的用法,畢竟這個(gè)已經(jīng)有16年歷史的玩意還在有人用,說明它的功能還是相當(dāng)強(qiáng)大的,感興趣的小伙伴可以了解一下 2022-05-05
-
5分鐘快速學(xué)會(huì)spring boot整合JdbcTemplate的方法
這篇文章主要給大家介紹了如何通過5分鐘快速學(xué)會(huì)spring boot整合JdbcTemplate的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用spring boot整合JdbcTemplate具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧 2019-12-12
-
Java并發(fā)編程示例(一):線程的創(chuàng)建和執(zhí)行
這篇文章主要介紹了Java并發(fā)編程示例(一):線程的創(chuàng)建和執(zhí)行,本文是系列文章的第一篇,需要的朋友可以參考下 2014-12-12
-
CentOS7和8中安裝Maven3.8.4的簡(jiǎn)單步驟
maven是屬于apache的一個(gè)工具,主要是對(duì)java進(jìn)行編譯打包,解決依賴關(guān)系,下面這篇文章主要給大家介紹了關(guān)于CentOS7和8中安裝Maven3.8.4的相關(guān)資料,需要的朋友可以參考下 2022-04-04
最新評(píng)論
詳解Kotlin中的面向?qū)ο螅ǘ?/strong>
在Kotlin中的面向?qū)ο螅ㄒ唬?/a>中,介紹了Kotlin類的相關(guān)操作,本文將在上文的基礎(chǔ)上,繼續(xù)介紹屬性、接口等同樣重要的面向?qū)ο蟮墓δ堋?br />
屬性
class AttrDemo{ private var attr1 : String = ""; protected var attr2 : String = ""; public var attr3 : String = ""; var varattr : String = ""; val valattr : String = ""; var attr = 1; }
屬性是每個(gè)對(duì)象中最基本的單位,也是必不可少的一部分,與Java一樣,Kotlin也提供了private、protected、public三種聲明變量的方式,不同的是,在Kotlin中如果沒聲明訪問權(quán)限,默認(rèn)認(rèn)為是public類型,即在其他任何地方都可以訪問。同時(shí),Kotlin提供了var和val用來表示屬性的讀寫權(quán)限,var是可讀寫的變量,val則是只讀變量,類似于Java中的final。
需要注意,Kotlin對(duì)于空安全的要求非常嚴(yán)格,所以對(duì)于所有的屬性都需要進(jìn)行初始化,因此也可以通過直接賦值的方式說明屬性的類型,不一定非在后面通過冒號(hào)的方式追加。不過對(duì)于習(xí)慣Java語法的開發(fā)者而言可能還是會(huì)注明屬性的類型,而習(xí)慣腳本語言的開發(fā)者可能會(huì)傾向于直接賦值。
在Kotlin中,get和set方法不是必須的,因?yàn)镵otlin會(huì)自動(dòng)對(duì)get和set方法進(jìn)行處理,變成直接調(diào)用屬性的方式(可參考Kotlin的第一行代碼中的說明),但Kotlin還是有自己獨(dú)特的使用get和set的方式
private var attr1 : String get() = attr1.toString() set(value) { attr1 = value } protected var attr2 : String get() { //TODO GET return attr2.toString() } set(value) { attr2 = value }
Kotlin提供了多種設(shè)置get和set的方法,上面的代碼中展示了兩種get方法和一種set方法,有時(shí)當(dāng)你希望改變get、set的訪問權(quán)限或是使用注解時(shí),也可以直接對(duì)get、set進(jìn)行操作
var attr4 : String = "" //一定要初始化 private set
接口
和Java類似,Kotlin使用interface作為接口的關(guān)鍵詞,和抽象類相比,他們都可以包含抽象的方法以及方法的實(shí)現(xiàn),但接口無法保存狀態(tài)。
interface mInterfaceDemo{ fun function1() fun function2(){ } }
和繼承的方式類似,實(shí)現(xiàn)接口也是使用冒號(hào)“:”,不過方法略有不同
class InterfaceDemoImpl : mInterfaceDemo{ override fun function1() { TODO("not implemented") //To change body of created functions use File | Settings | File Templates. } }
我們可以在接口中申明屬性,但接口中的屬性要么是抽象的,要么提供訪問器的實(shí)現(xiàn)。接口屬性不可以有后備字段,而且訪問器不可以引用它們。
泛型
泛型是程序設(shè)計(jì)語言的一種特性。允許程序員在強(qiáng)類型程序設(shè)計(jì)語言中編寫代碼時(shí)定義一些可變部分,那些部分在使用前必須作出指明。像 java 一樣,Kotlin 中的類可以擁有類型參數(shù)
class GenericDemo<T>(t : T){ var value = t }
通常來說,我們需要這樣構(gòu)建一個(gè)對(duì)象
val generic: GenericDemo<Int> = GenericDemo<Int>(1)
但如果類型是需要推斷的,也可以通過傳入忽略類型的參數(shù)進(jìn)行創(chuàng)建
val generic = GenericDemo(1)
嵌套類
Kotlin中的類也可以嵌套在別的類中
class Outer { private val bar: Int = 1 class Nested { fun foo() = 2 } }
可以通過inner修飾符增加一個(gè)對(duì)外部類的引用,使得內(nèi)部類可以調(diào)用外部類的屬性
class Outer { private val bar: Int = 1 inner class Inner { fun foo() = bar } } val demo = Outer().Inner().foo() //==1
對(duì)于匿名內(nèi)部類,通過對(duì)象表達(dá)式進(jìn)行創(chuàng)建
mvp_button.setOnClickListener(object : View.OnClickListener{ override fun onClick(v: View?) { TODO("not implemented") //To change body of created functions use File | Settings | File Templates. } });
如果對(duì)象是函數(shù)式的 java 接口的實(shí)例(比如只有一個(gè)抽象方法的 java 接口),我們可以用一個(gè)帶接口類型的 lambda 表達(dá)式創(chuàng)建它。
mvp_button.setOnClickListener { startActivity(Intent(MainActivity@this,MVPActivity::class.java)) }
枚舉類
枚舉類最基本的用法就是實(shí)現(xiàn)類型安全的枚舉,每個(gè)自舉常量都是一個(gè)對(duì)象。枚舉常量通過逗號(hào)分開。
enum class Direction { EAST,NORTH,SOUTH,WEST }
因?yàn)槊總€(gè)枚舉對(duì)象都是一個(gè)實(shí)例,所以我們可以對(duì)其進(jìn)行初始化
enum class Color(val rgb: Int) { RED(0xFF0000), GREEN(0x00FF00), BLUE(0x0000FF) }
當(dāng)我們需要調(diào)用枚舉對(duì)象的內(nèi)容時(shí),可以通過valueof獲取某個(gè)枚舉對(duì)象的值,或者通過values獲取所有枚舉對(duì)象
Direction.EAST Direction.valueOf("EAST"); Direction.values()
需要注意,如果指定的名字在枚舉類中沒有任何匹配,那么valueOf()方法將會(huì)拋出參數(shù)異常
Kotlin中核面向?qū)ο笙嚓P(guān)的內(nèi)容就介紹到這里,相關(guān)的代碼均提交在github中,
本文源碼下載:http://xiazai.jb51.net/201706/yuanma/helloKotlin-master(jb51.net).rar
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
Java StringUtils字符串分割轉(zhuǎn)數(shù)組的實(shí)現(xiàn)
這篇文章主要介紹了Java StringUtils字符串分割轉(zhuǎn)數(shù)組的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09SpringBoot+easypoi實(shí)現(xiàn)數(shù)據(jù)的Excel導(dǎo)出
這篇文章主要為大家詳細(xì)介紹了SpringBoot+easypoi實(shí)現(xiàn)數(shù)據(jù)的Excel導(dǎo)出,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-05-05SpringBoot+kaptcha實(shí)現(xiàn)驗(yàn)證碼花式玩法詳解
這篇文章主要想和大家聊聊kaptcha的用法,畢竟這個(gè)已經(jīng)有16年歷史的玩意還在有人用,說明它的功能還是相當(dāng)強(qiáng)大的,感興趣的小伙伴可以了解一下2022-05-055分鐘快速學(xué)會(huì)spring boot整合JdbcTemplate的方法
這篇文章主要給大家介紹了如何通過5分鐘快速學(xué)會(huì)spring boot整合JdbcTemplate的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用spring boot整合JdbcTemplate具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12Java并發(fā)編程示例(一):線程的創(chuàng)建和執(zhí)行
這篇文章主要介紹了Java并發(fā)編程示例(一):線程的創(chuàng)建和執(zhí)行,本文是系列文章的第一篇,需要的朋友可以參考下2014-12-12CentOS7和8中安裝Maven3.8.4的簡(jiǎn)單步驟
maven是屬于apache的一個(gè)工具,主要是對(duì)java進(jìn)行編譯打包,解決依賴關(guān)系,下面這篇文章主要給大家介紹了關(guān)于CentOS7和8中安裝Maven3.8.4的相關(guān)資料,需要的朋友可以參考下2022-04-04