1. 程式人生 > >我的Kotlin學習之旅(四)

我的Kotlin學習之旅(四)

類和繼承

1.類
在Kotlin中類也是用class表示,與Java不同的是,如果這個類沒有內容,可以省略這對大括號
可以只寫:

class Person

2.建構函式
在 Kotlin 中類可以有一個主建構函式以及多個二級建構函式。主建構函式是類頭的一部分:跟在類名後面
例如:

class Person constructor(name: String) {
}

這個主建構函式有一個形參,型別是String,形參名是name,這些都是可以由自己的需求決定的。
當這個主建構函式沒有使用註解(例如inject–>來自最近用到的Dagger等,有興趣的朋友可以看看我的另外一篇:

http://blog.csdn.net/ckwccc/article/details/78686194
或者沒有可見性說明(例如private等)時,可以省略關鍵字constructor,直接寫成:

class Person (name: String) {
}

主建構函式不能包含任意程式碼。初始化程式碼可以放在以 init 做字首的初始化塊內
當建立這個類時,Kotlin會自動的去載入init這個程式碼塊

class Person(name: String) {
    init {
        name = "ckwcc"
    }
}

注意主建構函式的引數可以用在初始化塊內,也可以用在類的屬性初始化宣告處:
例如:

class Person(name: String) {
    //類的屬性初始化宣告
    val customerKry = name.toUpperCase()
}

還有一種更加簡潔的宣告方式(直接在主建構函式中宣告):

class Person(val name: String,var age: Int) {
    //注意: val:一旦賦值之後就不能再改變了,而var可以
}

3.二級建構函式

類的二級建構函式,需要加字首 constructor:

class Person (name: String){
    constructor(age: Int) {
        //必須有constructor關鍵字
    }
}

如果一個非抽象類沒有宣告建構函式(主建構函式或二級建構函式),它會產生一個沒有引數的建構函式。該建構函式的可見性是 public 。這個東西的影響是在繼承它的時候,你需要在類名後面加一對小括號:

class StickyHeaderActivity : AppCompatActivity()

如果類有主建構函式,每個二級建構函式都要,或直接或間接通過另一個二級建構函式代理主建構函式。在同一個類中代理另一個建構函式使用 this 關鍵字:

class Person(val name: String) {
    constructor (name: String, paret: Person) : this(name) {
        parent.children.add(this)
    }
}

4.類例項的使用
這裡需要注意的是,Kotlin中沒有 new 這個關鍵字,而且所有的值都需要用val或者var來接收,這個我在一開始學習的時候也覺得有一點點不習慣,因為在Android中,都是用自己的型別來接收的。

val person = Person()

5.繼承

宣告一個明確的父類,需要在類頭後加冒號再加父類
例如

open class Base(p: Int)//這是父類

class Derived(p: Int) : Base(p)//子類繼承父類,需要寫父類的主建構函式,裡面的值是自己的主構造的引數

6.抽象類

關鍵字也是abstract,抽象函式和抽象類預設是open的,即可以被繼承或者複寫

7.複寫(方法或者屬性)

如果父類的某個方法或者屬性想要被子類複寫,需要加上open關鍵字
而子類複寫的方法上必須有override 關鍵字

相關推薦

Kotlin學習

類和繼承 1.類 在Kotlin中類也是用class表示,與Java不同的是,如果這個類沒有內容,可以省略這對大括號 可以只寫: class Person 2.建構函式 在 Kotlin 中類可以有一個主建構函式以及多個二級建構函式。主建構函式是類頭

的機器學習:回歸與工程應用

多個 算法 ati function RR numpy pen 圖片 bsp 內容:線性回歸;邏輯回歸,應用場景。 一、線性回歸 有監督學習,根據學習樣本{x->y},學習一個映射f:X->Y(線性相關),輸出預測結果y_i。最簡單的例子:y=ax+b 重要組成

Kotlin學習

在Kotlin語言中文站學習了一段時間,這是第二次看文件,第一次簡單的看了一遍,等真正要用的時候又發現不真正實踐的話,學習的效果並沒有很好,所以在第二遍看文件的時候,自己手寫做了一遍筆記,然後接著寫這個學習之旅的部落格 首先是Kotlin的基本語法: 1.定

Kotlin學習

擴充套件 初次見到擴充套件的概念的時候,確實是有點不太理解的,完全搞不懂這是個什麼東東。 翻譯文件上是這麼說的: 與 C# 和 Gosu 類似, Kotlin 也提供了一種,可以在不繼承父類,也不使用類似裝飾器這樣的設計模式的情況下對指定類進行擴充套件。我

Spring學習Spring工作原理再探

容器 mxml 實現 span ssp express 16px 部分 做了 上篇博文對Spring的工作原理做了個大概的介紹,想看的同學請出門左轉。今天詳細說幾點。 (一)Spring IoC容器及其實例化與使用 Spring IoC容器負責Bean的實例化、配置和組裝工

機器學習

吳恩達教授的機器學習課程的第四周相關內容: 1、神經網路:表述(Neural Networks: Representation) 1.1、非線性假設( Non-linear Hypotheses ) 我們之前學的,無論是線性迴歸還是邏輯迴歸都有這樣一個缺點,即: 當特徵太多時,計

Flutter學習Flutter動畫1動畫基礎介紹

前言 本篇將介紹Flutter中動畫。首先來看下Flutter的動畫基礎概念和相關類 Animation:Flutter中動畫的核心類 AnimationController:動畫管理類 Tween:補間物件,用於計算動畫使用的資料範圍之間的插值。 Listeners

的CTF

這次做的是幾道簡單的加解密題。 題目來源:HCTF2014 QUALS 描述: 57R9S980RNOS49973S757PQO9S80Q36P 聽說丘比龍一口氣能吃”13”個甜甜圈呢! 看到13,密文中也是13個數字,應該就是rot13編碼後結果,解碼

WebService學習Apache Axis2的安裝

一、Axis2簡介 Axis2是目前使用較多的WebService引擎,它是Axis1.x的升級版本,不僅支援SOAP1.1和SOAP1.2,而且也提供了對REST風格WebService的支援。 Axis2較舊的版本是更有效率,更加模組化和更多的XML型別

的C#跨平臺:使用AOP進行系統增強

odata ima ges rest eba 技術分享 啟動 get header 使用OData提速REST API開發 引入NuGet包:Microsoft.AspNet.WebApi.OData 在啟動類中添加如下配置(示例為全局配置,也可基於Contro

的機器學習:決策樹

family 分配 根據 drop chrom labels arch ntp -o 決策樹概念: 分類決策樹模型是一種描述對實例進行分類的樹形結構。決策樹由結點和有向邊組成。結點有兩種類型:內部節點和葉節點,內部節點表示一個特征或屬性,葉節點表示一個類。 分類的時候,從根

的Python學習02

我的Python學習之旅(02) 基本資料型別及變數的使用 list和tuple 條件判斷和迴圈 dict和set 好,接著上次的話題來說說Python的資料型別 首先,說個題外話,推薦學習python的大家去看看廖雪峰老師的部落格,講得

的Python學習01

我的Python學習之旅(01) 初識Python Hello World Python的輸入輸出 基本資料型別及變數的使用 list和tuple 條件判斷和迴圈 dict和set Python概要 Python

記錄的Python學習time庫的基本操作

1、time() 功能:獲取當前時間戳,即計算機內部時間值,浮點數  2、ctime() 功能:獲取當前時間並以易讀方式表示,返回字串 3、gmtime() 功能:獲取當前實踐,表示為計算機可處理的時間格式  4、時間格式化:如t=time.gmtime()  

記錄的Python學習關於turtle庫的基本用法

關於庫函式的匯入方法:①import <> ②import <> as <> ③ from tutle import <>   1、turtle.setup(width,height,startx,starty)  /

的Android NDK,android串列埠通訊-mac+串列埠除錯工具

一些關於串列埠的知識 什麼是串列埠 串列埠是計算機上一種非常通用裝置通訊的協議,不要與通用序列匯流排Universal Serial Bus(USB)混淆。大多數計算機包含兩個基於RS232的串列埠。串列埠同時也是儀器儀表裝置通用的通訊協議;很多GP

的WCF學習2WCF通訊的核心功能

WCF核心通訊功能主要有四種: SOAP(Simple Object Access Protocol,簡單物件訪問協議):一個獨立於平臺的協議,它是某些Web服務規範的基礎,支援安全性、事物、可靠性 WSDL(Web Services Description Languag

章 開始Unity Shader學習3

行處理 由於 ctx 渲染 ima arc bubuko 這一 vpd 1. 程序員的煩惱:Debug 調試(debug),大概是所有程序員的噩夢。而不幸的是,對一個Shader進行調試更是噩夢中的噩夢。這也是造成Shader難寫的原因之一——如果發現得到的效果不對,我們就

python學習

[1] size class dex epc uri msu 語句 這就是 繼續昨天的學習,學到了數組。 首先有兩個數組,name1和name2.我們可以將兩個數組合並 name1=[1,2,3,4] name2=[5,6,7,8] names=name1.extend(

Linux學習幫助命令

查看系統 lin 查看 inux 舉例 config pro nbsp 雜項 幫助命令man .man  命令  #獲取指定命令的幫助 .man  ls    #查看ls的幫助 man的級別 1 查看命令的幫助 2 查看可被內核調用的函數的幫助 3 查看函數的