淺談Kotlin(三):類

来源:http://www.cnblogs.com/xqxacm/archive/2017/05/22/6879526.html
-Advertisement-
Play Games

淺談Kotlin(一):簡介及Android Studio中配置 淺談Kotlin(二):基本類型、基本語法、代碼風格 前言: 已經學習了前兩篇文章,對Kotlin有了一個基本的認識,往後的文章開始深入介紹Kotlin的實戰使用。 本篇介紹Kotlin中類的使用。 一、表現形式 首先看一段Java中 ...


淺談Kotlin(一):簡介及Android Studio中配置

淺談Kotlin(二):基本類型、基本語法、代碼風格

淺談Kotlin(三):類

 

前言:

  已經學習了前兩篇文章,對Kotlin有了一個基本的認識,往後的文章開始深入介紹Kotlin的實戰使用。

  本篇介紹Kotlin中類的使用。

 

一、表現形式

  首先看一段Java中定義類的形式,定義三個屬性,每一個屬性對應一個get、set方法,有一個toString()方法

/*
* @author xqx
* @emil [email protected]
* create at 2017/5/18
* description: 自己寫的類,人,包含姓名,年齡,性別
*/

public class XPatient {
    private String name;  //姓名
    private int age;      //年齡
    private int sex;     //性別  1、男    2、女

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getSex() {
        return sex;
    }

    public void setSex(int sex) {
        this.sex = sex;
    }

    @Override
    public String toString() {
        return "XPatient{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", sex=" + sex +
                '}';
    }
}

  

  接下來我們看這個類對應的Kotlin的表現形式:

  跟著下麵的操作做一個處理,讓我們這個類對應的 .java 文件轉化為對應的 .kt 文件

  

  

  之後轉換完成我們看下轉換後的代碼:

  看一下變化:

      1、代碼量少了很多

      2、get/set方法都沒有了

      3、只有一個重寫的toString()方法。

      4、類的屬性都有一個預設的初始值

/*
* @author xqx
* @emil [email protected]
* create at 2017/5/18
* description: 自己寫的類,人,包含姓名,年齡,性別
*/

class XPatient {
    var name: String? = null  //姓名
    var age: Int = 0      //年齡
    var sex: Int = 0     //性別  1、男    2、女

    override fun toString(): String {
        return "XPatient{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", sex=" + sex +
                '}'
    }
}

 

二、定義類的構造方法

  首先看Java類的構造

  Java中定義構造方法特點:

      1、方法名需要和類名一致

      2、參數可以任意屬性值的組合,也可以不寫

      3、可以有多個構造方法

    //無參數的構造方法
    public JPatient() {
    }

    //類的三個屬性值都需要的構造方法
    public JPatient(String name, int age, int sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
    }

  

  在看Kotlin的類,這裡有個知識點 :Kotlin類中可以有一個主構造方法一個至多個二級構造方法

  ①、主構造方法的的寫法:

    直接寫在類的頭部,類似於定義方法的形式 加一個參數。

    需要添加 init{} 代碼塊來處理對主構造方法傳來的參數的初始化操作

class XPatient(name: String? ,age: Int ,sex: Int) {  //主構造方法的形式 ,類名後面加(屬性名 : 屬性類型 .....)
    var name: String? = null  //姓名
    var age: Int = 0      //年齡
    var sex: Int = 0     //性別  1、男    2、女


    /*進行主構造函數的初始化,自己定製*/
    init {
        this.name = name;
        this.age = age+1;
        this.sex = sex-1;
    }
    ....
}

    

  ②、二級構造方法:

    為了實現類似於Java中一個類具有多種構造方法

    二級構造函數最終委托到主構造方法,中間可以有0個或多個中間二級構造方法。

    個人理解,如果涉及到一個類有多個構造方法的時候,主構造方法儘量設為無參的。

    如下:當創建一個對象XPatient("Alice",18); 的時候 會調用二級構造方法 constructor(name: String?,age : Int):this(name){}

       該二級構造方法再委托(調用)對應的一個參數name(String) 對應的二級構造方法  constructor(name:String?):this( ){}

       一個參數的該二級構造方法最終委托(調用)主構造方法

    下麵舉例測試:

class XPatient() {
var name: String? = null //姓名
var age: Int = 0 //年齡
var sex: Int = 0 //性別 1、男 2、女


/*進行主構造函數的初始化*/
init {
Log.i("xqxinfo","調用了無參數的主構造方法");
}

/*傳入(name)*/
constructor(name:String?):this( ){
this.name = "Alice";
Log.i("xqxinfo","調用了一個參數的二級構造方法");

}
/*傳入(name,age)*/
constructor(name: String?,age : Int):this(name){
this.age = age+1;
Log.i("xqxinfo","調用了兩個參數的二級構造方法");
}

override fun toString(): String {
return "XPatient{" +
"name='" + name + '\'' +
", age=" + age +
", sex=" + sex +
'}'
}
}

    進行測試:

val patient = XPatient("Alice", 18)
Log.i("xqxinfo", "該對象的屬性值" + patient.toString())

    列印結果:

05-19 18:08:05.621 25081-25081/? I/xqxinfo: 調用了無參數的主構造方法
05-19 18:08:05.621 25081-25081/? I/xqxinfo: 調用了一個參數的二級構造方法
05-19 18:08:05.621 25081-25081/? I/xqxinfo: 調用了兩個參數的二級構造方法
05-19 18:08:05.621 25081-25081/? I/xqxinfo: 該對象的屬性值XPatient{name='Alice', age=19, sex=0}

    這裡看一下,不要以為先執行了主構造方法,然後再執行一個參數的,再執行兩個參數的二級構造方法。

    實際還是先執行了創建對象的那個參數 對應的兩個參數的二級構造方法,兩個參數的構造方法調用一個參數的構造方法,一個參數的又調用了主構造方法。

    所以當主構造方法執行完之後,會返回來執行一個參數的構造方法內的處理,一個參數的構造方法執行完了,再執行兩個參數的構造方法內的處理類似於遞歸。

      所以列印結果如上代碼所示。

 

二、類的繼承

  關於Kotlin的類有幾個知識點需要先知道:

    1、預設情況下,任何類都是根繼承自Any(類似於Java中的Object)

    2、預設情況下,任何類都是不可繼承的(final)

    3、只有被申明open或者abstract的類可以被繼承

 

  繼承形式:

 

open class Animal(name: String)  // 被繼承的類  需要open修飾
class Person(name: String, surname: String) : Animal(name)     //繼承Animal類的類

 

 

 

註:方法即函數

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 歡迎小伙伴們為 前端導航倉庫 點star https://github.com/pfan123/fr...前端導航平臺訪問 CommonJS 和 AMD 是用於 JavaScript 模塊管理的兩大規範,前者定義的是模塊的同步載入,主要用於 NodeJS ;而後者則是非同步載入,通過 RequireJ ...
  • 工具方法。對函數的統一管理。 jquery2.0.3版本$.Callback()部分的源碼如下: // String to Object options format cache var optionsCache = {}; // Convert String-formatted options i ...
  • 前言 this用法說難不難,有時候函數調用時,往往會搞不清楚this指向誰?那麼,關於this的用法,你知道多少呢? 下麵我來給大家整理一下關於this的詳細分析,希望對大家有所幫助! this指向的規律 this指向的規律往往與函數調用的方式息息相關;this指向的情況,取決於函數調用的方法有哪些 ...
  • JavaScript是一門編程語言,瀏覽器內置了JavaScript語言的解釋器,所以在瀏覽器上按照JavaScript語言的規則編寫相應代碼之,瀏覽器可以解釋並做出相應的處理。一、如何編寫二、變數三、數據類型1、數字(Number)2、字元串(String)3、布爾類型(Boolean)4、數組(... ...
  • 一.ES6簡介 引用阮一峰老師的話:ECMAScript 6.0(以下簡稱 ES6)是 JavaScript 語言的下一代標準,已經在2015年6月正式發佈了。它的目標,是使得 JavaScript 語言可以用來編寫複雜的大型應用程式,成為企業級開發語言。 二.變數 let命令: ES6新增了let ...
  • js中的this是一個頭疼的問題,尤其對於筆者這種初級的菜鳥來講,下麵梳理下this的知識,可以當做是初級進階也好入門也罷,總歸輸出的才是自己掌握的: Js中this不是由詞法作用域決定的 而是調用時動態指定,這就有點麻煩了,如果不能明確知道函數調用時的詞法作用域this的指向也就只能靠猜了,算一卦 ...
  • 這是Webpack+React系列配置過程記錄的第四篇。其他內容請參考: 第一篇:使用webpack、babel、react、antdesign配置單頁面應用開發環境 第二篇:使用react-router實現單頁面應用路由 第三篇:優化單頁面開發環境:webpack與react的運行時打包與熱更新 ...
  • * 這東西叫“通配符”用來匹配頁面上所有元素。*{margin:0; padding:0;} 像 2L 所說,body ,ul, li ,p,h1~h6,dd,dt 等……都有預設的margin 或padding值的,加上這句就可以刪除瀏覽器這些預設值,方面後面的設置。(註:不是沒它不行,只是方便而 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...