欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解Kotlin中的面向?qū)ο螅ㄒ唬?/h1>
 更新時(shí)間:2017年06月20日 09:36:31   作者:steveyg  
這篇文章主要介紹了詳解Kotlin中的面向?qū)ο螅ㄒ唬┑南嚓P(guān)資料,需要的朋友可以參考下

Kotlin中的面向?qū)ο?/strong>

面向?qū)ο?/strong>

面向?qū)ο蟮暮x大家應(yīng)該并不陌生,通過(guò)將事物抽象成對(duì)象,大大簡(jiǎn)化了程序的開(kāi)發(fā)難度。我們常用的Java、Python、C++都屬于面向?qū)ο蟮木幊陶Z(yǔ)言。Kotlin和java很相似,也是一種面向?qū)ο蟮恼Z(yǔ)言。作為Kotlin中最重要的一部分,我們可以通過(guò)了解Kotlin的OOP進(jìn)而了解這門(mén)語(yǔ)言,本文將從類(lèi)、屬性、接口、對(duì)象等多個(gè)方面介紹Kotlin的面向?qū)ο蟮奶匦浴?/p>

類(lèi)

和大部分語(yǔ)言類(lèi)似,Kotlin使用class作為類(lèi)的關(guān)鍵字,當(dāng)我們聲明一個(gè)類(lèi)時(shí),需要通過(guò)class加類(lèi)名的方式實(shí)現(xiàn):

class ClassDemo{ 
 
} 

在聲明一個(gè)類(lèi)的時(shí)候,至少需要包含class關(guān)鍵字以及后面的類(lèi)名,同時(shí)也可以根據(jù)需要增加類(lèi)頭(用來(lái)聲明一些參數(shù))和類(lèi)體(花括號(hào){}中包含的內(nèi)容,可省略)。

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

與java不同的是,雖然都可以包含多個(gè)構(gòu)造函數(shù),但java中的各個(gè)構(gòu)造函數(shù)都是平級(jí)的,而Kotlin中卻分為了兩級(jí)(主構(gòu)造函數(shù)和二級(jí)構(gòu)造函數(shù)),主構(gòu)造函數(shù)是包含在類(lèi)頭中的,需要在init方法中實(shí)現(xiàn)額外的操作,而二級(jí)構(gòu)造函數(shù)可以在函數(shù)體中實(shí)現(xiàn)所有操作

//主構(gòu)造函數(shù),constructor和init都可省略 
class ClassDemo constructor(type:String){ 
 init{ 
 System.out.println(type) 
 } 
} 

在主構(gòu)造函數(shù)中傳入的參數(shù)可以在類(lèi)體中為屬性賦值,也可以直接在主構(gòu)造函數(shù)中聲明

class ClassDemo(type:String, var prop2: String = type){ 
 var prop1 = type 
} 

二級(jí)構(gòu)造函數(shù)必須包含constructor

class ClassDemo{ 
 constructor(type:String){ 
  System.out.println(type) 
 } 
} 

對(duì)于有主構(gòu)造函數(shù)的類(lèi)而言,每個(gè)二級(jí)構(gòu)造函數(shù)都要,或直接或間接通過(guò)另一個(gè)二級(jí)構(gòu)造函數(shù)代理主構(gòu)造函數(shù)。在同一個(gè)類(lèi)中代理另一個(gè)構(gòu)造函數(shù)使用 this 關(guān)鍵字:

//包含主構(gòu)造函數(shù)的二級(jí)構(gòu)造函數(shù) 
class ClassDemo(type:String){ 
 constructor(type:String, param:String):this(type){ 
  System.out.println(type + param) 
 } 
} 

無(wú)論有沒(méi)有聲明主構(gòu)造函數(shù),Kotlin都會(huì)提供一個(gè)構(gòu)造函數(shù)的方法,有時(shí)可能不希望將某個(gè)類(lèi)的構(gòu)造函數(shù)暴露出來(lái)(比如實(shí)現(xiàn)單例模式時(shí)),那么就需要對(duì)主構(gòu)造函數(shù)進(jìn)行處理

class ClassDemo private constructor(){ 
 
} 

當(dāng)我們想創(chuàng)建實(shí)例時(shí),可以直接調(diào)用對(duì)應(yīng)的構(gòu)造函數(shù)進(jìn)行創(chuàng)建

var demo = ClassDemo("hello world") 
val demo = ClassDemo("hello","world") 

我們注意到,在Kotlin中無(wú)論是聲明屬性還是創(chuàng)建實(shí)例,會(huì)有兩種方式,var和val,val類(lèi)似于java中的final,通過(guò)它聲明的內(nèi)容是無(wú)法變化的,而var和val相反,聲明的內(nèi)容既可以讀取也可以修改。

繼承

在Kotlin中,所有的類(lèi)會(huì)默認(rèn)繼承Any這個(gè)父類(lèi),但Any并不完全等同于java中的Object類(lèi),因?yàn)樗挥衑quals(),hashCode()和toString()這三個(gè)方法。當(dāng)我們想定義一個(gè)父類(lèi)時(shí),需要使用open關(guān)鍵字

open class Base{ 
 
} 

然后在子類(lèi)中使用冒號(hào)“:”進(jìn)行繼承

class SubClass : Base(){ 
 
} 

如果父類(lèi)有構(gòu)造函數(shù),那么必須在子類(lèi)的主構(gòu)造函數(shù)中進(jìn)行繼承,沒(méi)有的話則可以選擇主構(gòu)造函數(shù)或二級(jí)構(gòu)造函數(shù)

//父類(lèi) 
open class Base(type:String){ 
 
} 
 
//子類(lèi) 
class SubClass(type:String) : Base(type){ 
 
} 

重寫(xiě)

Kotlin中的重寫(xiě)和java中也有所不同,因?yàn)镵otlin提倡所有的操作都是明確的,因此需要將希望重寫(xiě)的方法設(shè)為open

open fun funDemo() {} 

然后通過(guò)override標(biāo)記實(shí)現(xiàn)重寫(xiě)

override fun funDemo() { 
 super.funDemo() 
 } 

override重寫(xiě)的函數(shù)也是open的,如果希望它不被重寫(xiě)(前提是這個(gè)類(lèi)可以被繼承),可以在前面增加final標(biāo)簽

open class SubClass : Base{ 
 constructor(type:String) : super(type){ 
 
 } 
 
 final override fun funDemo() { 
 super.funDemo() 
 } 
} 

當(dāng)一個(gè)類(lèi)同時(shí)繼承且實(shí)現(xiàn)了多個(gè)接口時(shí),如果重寫(xiě)的方法在父類(lèi)和接口中都有定義,那么可以通過(guò)super<>的方式進(jìn)行繼承

//接口 
interface InterfaceDemo{ 
 fun funDemo(){} 
} 
 
//繼承Base并且實(shí)現(xiàn)InterfaceDemo 
class SubClass : Base(),InterfaceDemo{ 
 final override fun funDemo() { 
 super<Base>.funDemo() 
 super<InterfaceDemo>.funDemo() 
 } 
} 

密封類(lèi)

密封類(lèi)用于代表嚴(yán)格的類(lèi)結(jié)構(gòu),值只能是有限集合中的某中類(lèi)型,不可以是任何其它類(lèi)型。這就相當(dāng)于一個(gè)枚舉類(lèi)的擴(kuò)展:枚舉值集合的類(lèi)型是嚴(yán)格限制的,但每個(gè)枚舉常量只有一個(gè)實(shí)例,而密封類(lèi)的子類(lèi)可以有包含不同狀態(tài)的多個(gè)實(shí)例。聲明密封類(lèi)需要在 class 前加一個(gè) sealed 修飾符。密封類(lèi)可以有子類(lèi)但必須全部嵌套在密封類(lèi)聲明內(nèi)部。

//密封類(lèi) 
sealed class Expr { 
 class Const(val number: Double) : Expr() 
 class Sum(val e1: Expr, val e2: Expr) : Expr() 
 object NotANumber : Expr() 
} 

和Kotlin中的類(lèi)相關(guān)的用法就介紹到這里,文中的完整代碼見(jiàn)github,在Kotlin中的面向?qū)ο螅ǘ?/a>中將會(huì)介紹屬性、接口等面向?qū)ο筮^(guò)程中同樣常見(jiàn)的內(nèi)容。

文章代碼下載:http://xiazai.jb51.net/201706/yuanma/helloKotlin-master(jb51.net).rar

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

相關(guān)文章

  • SpringBoot集成screw實(shí)現(xiàn)數(shù)據(jù)庫(kù)文檔生成的代碼示例

    SpringBoot集成screw實(shí)現(xiàn)數(shù)據(jù)庫(kù)文檔生成的代碼示例

    數(shù)據(jù)庫(kù)設(shè)計(jì)文檔是項(xiàng)目技術(shù)文檔的重要組成部分,Screw 是一款開(kāi)源的數(shù)據(jù)庫(kù)文檔生成工具,它支持多種數(shù)據(jù)庫(kù)類(lèi)型,并能生成豐富格式的文檔,本文將通過(guò)一個(gè)實(shí)際的例子,展示如何使用 Spring Boot 集成 Screw 生成數(shù)據(jù)庫(kù)設(shè)計(jì)文檔
    2024-07-07
  • 深入理解Java 線程通信

    深入理解Java 線程通信

    這篇文章主要介紹了Java 線程通信的的相關(guān)資料,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • 如何查看Linux上正在運(yùn)行的所有Java程序列表

    如何查看Linux上正在運(yùn)行的所有Java程序列表

    在linux操作時(shí),經(jīng)常要查看運(yùn)行的項(xiàng)目的進(jìn)程和端口,下面這篇文章主要給大家介紹了關(guān)于如何查看Linux上正在運(yùn)行的所有Java程序列表的相關(guān)資料,需要的朋友可以參考下
    2023-10-10
  • Eclipse連接Mysql數(shù)據(jù)庫(kù)操作總結(jié)

    Eclipse連接Mysql數(shù)據(jù)庫(kù)操作總結(jié)

    這篇文章主要介紹了Eclipse連接Mysql數(shù)據(jù)庫(kù)操作總結(jié)的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-08-08
  • 深入分析Spring BeanDefinition的構(gòu)造元信息

    深入分析Spring BeanDefinition的構(gòu)造元信息

    Bean Definition是一個(gè)包含Bean元數(shù)據(jù)的對(duì)象,它描述了如何創(chuàng)建Bean實(shí)例、Bean屬性的值以及Bean之間的依賴(lài)關(guān)系,本文將帶大家深入分析Spring BeanDefinition的構(gòu)造元信息,需要的朋友可以參考下
    2024-01-01
  • 使用GSON庫(kù)將Java中的map鍵值對(duì)應(yīng)結(jié)構(gòu)對(duì)象轉(zhuǎn)換為JSON

    使用GSON庫(kù)將Java中的map鍵值對(duì)應(yīng)結(jié)構(gòu)對(duì)象轉(zhuǎn)換為JSON

    GSON是由Google開(kāi)發(fā)并開(kāi)源的實(shí)現(xiàn)Java對(duì)象與JSON之間相互轉(zhuǎn)換功能的類(lèi)庫(kù),這里我們來(lái)看一下使用GSON庫(kù)將Java中的map鍵值對(duì)應(yīng)結(jié)構(gòu)對(duì)象轉(zhuǎn)換為JSON的示例:
    2016-06-06
  • Java中的SPI機(jī)制案例分享

    Java中的SPI機(jī)制案例分享

    這篇文章主要介紹了Java中的SPI機(jī)制案例分享,文章基于Java的相關(guān)資料展開(kāi)SPI的詳細(xì)介紹,SPI的全稱(chēng)是Service?Provider?Interface,服務(wù)提供者接口,下文更多相關(guān)內(nèi)容介紹需要的小伙伴可以參考一下
    2022-04-04
  • Java常用HASH算法總結(jié)【經(jīng)典實(shí)例】

    Java常用HASH算法總結(jié)【經(jīng)典實(shí)例】

    這篇文章主要介紹了Java常用HASH算法,結(jié)合實(shí)例形式總結(jié)分析了Java常用的Hash算法,包括加法hash、旋轉(zhuǎn)hash、FNV算法、RS算法hash、PJW算法、ELF算法、BKDR算法、SDBM算法、DJB算法、DEK算法、AP算法等,需要的朋友可以參考下
    2017-09-09
  • 關(guān)于SpringBoot攔截器攔截靜態(tài)資源的問(wèn)題

    關(guān)于SpringBoot攔截器攔截靜態(tài)資源的問(wèn)題

    這篇文章主要介紹了關(guān)于SpringBoot攔截器攔截靜態(tài)資源的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • java中避免集合死鏈調(diào)用詳情

    java中避免集合死鏈調(diào)用詳情

    這篇文章主要介紹了java中避免集合死鏈調(diào)用,開(kāi)發(fā)過(guò)程中, 一些集合 的變動(dòng)會(huì)觸發(fā)任務(wù)去 改變 其他的集合 ,為了保障任務(wù)的正確執(zhí)行,應(yīng)避免出現(xiàn)死循環(huán)調(diào)用,即對(duì) 集合之間的影響關(guān)系 進(jìn)行一些限制,下面文章就來(lái)看看這種問(wèn)題的避免
    2021-09-09

最新評(píng)論