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

詳解Kotlin中的面向對象(一)

 更新時間:2017年06月20日 09:36:31   作者:steveyg  
這篇文章主要介紹了詳解Kotlin中的面向對象(一)的相關資料,需要的朋友可以參考下

Kotlin中的面向對象

面向對象

面向對象的含義大家應該并不陌生,通過將事物抽象成對象,大大簡化了程序的開發(fā)難度。我們常用的Java、Python、C++都屬于面向對象的編程語言。Kotlin和java很相似,也是一種面向對象的語言。作為Kotlin中最重要的一部分,我們可以通過了解Kotlin的OOP進而了解這門語言,本文將從類、屬性、接口、對象等多個方面介紹Kotlin的面向對象的特性。


和大部分語言類似,Kotlin使用class作為類的關鍵字,當我們聲明一個類時,需要通過class加類名的方式實現:

class ClassDemo{ 
 
} 

在聲明一個類的時候,至少需要包含class關鍵字以及后面的類名,同時也可以根據需要增加類頭(用來聲明一些參數)和類體(花括號{}中包含的內容,可省略)。

構造函數

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

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

在主構造函數中傳入的參數可以在類體中為屬性賦值,也可以直接在主構造函數中聲明

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

二級構造函數必須包含constructor

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

對于有主構造函數的類而言,每個二級構造函數都要,或直接或間接通過另一個二級構造函數代理主構造函數。在同一個類中代理另一個構造函數使用 this 關鍵字:

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

無論有沒有聲明主構造函數,Kotlin都會提供一個構造函數的方法,有時可能不希望將某個類的構造函數暴露出來(比如實現單例模式時),那么就需要對主構造函數進行處理

class ClassDemo private constructor(){ 
 
} 

當我們想創(chuàng)建實例時,可以直接調用對應的構造函數進行創(chuàng)建

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

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

繼承

在Kotlin中,所有的類會默認繼承Any這個父類,但Any并不完全等同于java中的Object類,因為它只有equals(),hashCode()和toString()這三個方法。當我們想定義一個父類時,需要使用open關鍵字

open class Base{ 
 
} 

然后在子類中使用冒號“:”進行繼承

class SubClass : Base(){ 
 
} 

如果父類有構造函數,那么必須在子類的主構造函數中進行繼承,沒有的話則可以選擇主構造函數或二級構造函數

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

重寫

Kotlin中的重寫和java中也有所不同,因為Kotlin提倡所有的操作都是明確的,因此需要將希望重寫的方法設為open

open fun funDemo() {} 

然后通過override標記實現重寫

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

override重寫的函數也是open的,如果希望它不被重寫(前提是這個類可以被繼承),可以在前面增加final標簽

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

當一個類同時繼承且實現了多個接口時,如果重寫的方法在父類和接口中都有定義,那么可以通過super<>的方式進行繼承

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

密封類

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

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

和Kotlin中的類相關的用法就介紹到這里,文中的完整代碼見github,在Kotlin中的面向對象(二)中將會介紹屬性、接口等面向對象過程中同樣常見的內容。

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

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

相關文章

  • SpringBoot集成screw實現數據庫文檔生成的代碼示例

    SpringBoot集成screw實現數據庫文檔生成的代碼示例

    數據庫設計文檔是項目技術文檔的重要組成部分,Screw 是一款開源的數據庫文檔生成工具,它支持多種數據庫類型,并能生成豐富格式的文檔,本文將通過一個實際的例子,展示如何使用 Spring Boot 集成 Screw 生成數據庫設計文檔
    2024-07-07
  • 深入理解Java 線程通信

    深入理解Java 線程通信

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

    如何查看Linux上正在運行的所有Java程序列表

    在linux操作時,經常要查看運行的項目的進程和端口,下面這篇文章主要給大家介紹了關于如何查看Linux上正在運行的所有Java程序列表的相關資料,需要的朋友可以參考下
    2023-10-10
  • Eclipse連接Mysql數據庫操作總結

    Eclipse連接Mysql數據庫操作總結

    這篇文章主要介紹了Eclipse連接Mysql數據庫操作總結的相關資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-08-08
  • 深入分析Spring BeanDefinition的構造元信息

    深入分析Spring BeanDefinition的構造元信息

    Bean Definition是一個包含Bean元數據的對象,它描述了如何創(chuàng)建Bean實例、Bean屬性的值以及Bean之間的依賴關系,本文將帶大家深入分析Spring BeanDefinition的構造元信息,需要的朋友可以參考下
    2024-01-01
  • 使用GSON庫將Java中的map鍵值對應結構對象轉換為JSON

    使用GSON庫將Java中的map鍵值對應結構對象轉換為JSON

    GSON是由Google開發(fā)并開源的實現Java對象與JSON之間相互轉換功能的類庫,這里我們來看一下使用GSON庫將Java中的map鍵值對應結構對象轉換為JSON的示例:
    2016-06-06
  • Java中的SPI機制案例分享

    Java中的SPI機制案例分享

    這篇文章主要介紹了Java中的SPI機制案例分享,文章基于Java的相關資料展開SPI的詳細介紹,SPI的全稱是Service?Provider?Interface,服務提供者接口,下文更多相關內容介紹需要的小伙伴可以參考一下
    2022-04-04
  • Java常用HASH算法總結【經典實例】

    Java常用HASH算法總結【經典實例】

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

    關于SpringBoot攔截器攔截靜態(tài)資源的問題

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

    java中避免集合死鏈調用詳情

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

最新評論