Kotlin 中的類與接口

1、前言

<font face= 黑體>在 Kotlin 學習筆記以內置類型(1)Kotlin 學習筆記以內置類型(2)中咱們已經講了 Kotlin 內置類型中的基本類型數組區間集合框架函數java

2、Kotlin 中的類和接口

2.一、類的定義

Java:git

// 簡單的類
public class SimpleClass {
}

// 有屬性和方法的類
public class SimpleClass {
    public int x;
    public void y() {
    }
}

// 有構造方法的類
public class SimpleClass {
    public int x;
    public SimpleClass(int x) {
        this.x = x;
    }
}

Kotlin:github

  1. <font face= 黑體>默認是 public;
  2. <font face= 黑體>類內部無內容,括號可省略‘
  3. <font face= 黑體>類中的屬性必須初始化或者延遲初始化。
// 簡單的類
class SimpleClass   // 默認是 public

// 有屬性和方法的類
class SimpleClass {
    var x: Int = 0  // 必須初始化
    fun y() {
    }
}

// 有構造方法的類
class SimpleClass {
    var x: Int = 0  // 必須初始化
    constructor(x: Int) {  // 副構造器
        var x: Int = x
    }
}
<==> //等價寫法
class SimpleClass constructor (x: Int) {  // 主構造器
    var x: Int = x
}
<==> // 等價寫法
class SimpleClass (x: Int) {  // 主構造器
    var x: Int = x
}
<==> // 等價寫法
class SimpleClass (var x: Int) {  // 主構造器

}

2.二、類的實例化

Java:正則表達式

SimpleClass simpleClass = new SimpleClass(9);
System.out.println(simpleClass.x);
simpleClass.y();

Kotlin:segmentfault

val simpleClass = SimpleClass(9)
println(simpleClass.x)
simpleClass.y()

2.三、接口的定義

Java:數組

public interface SimpleInf {
    void simpleMethod();
}

Kotlin:安全

interface SimpleInf {
    fun simpleMethod()
}

2.四、接口的實現

Java:框架

public class SimpleClass implements SimpleInf {
    @Override
    public void simpleMethod() {
    }
}

Kotlin:ide

class SimpleClass(var x: Int): SimpleInf {
    override fun simpleMethod() {
    }
}

2.五、抽象類的定義

Java:函數

public abstract class AbsClass {
    public abstract void absMethod();
    protected void overridable(){ }
    public final void nonOverridable(){ }
}

Kotlin:

abstract class AbsClass {
    abstract fun absMethod()
    
    // 不是抽象方法也不是接口方法  
    // 必須加 open 關鍵字的方法才能夠被覆寫
    open fun overridable(){}                             
    fun nonOverridable(){}
}

2.六、類的繼承

Java:

public class SimpleClass extends AbsClass implements SimpleInf {

}

Kotlin:

class SimpleClass(var x: Int): AbsClass(), SimpleInf {

}

2.七、屬性 Property

<font face= 黑體>Kotlin 中的 Property 其實就等於 Java 中的 field + getter + setter。

Java:

public class Person {
    private int age; //field
    
    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        System.out.println("setAge: " + age);
        this.age = age;
    }
}

Kotlin:

class Person(age: Int, name: String) {
    var age: Int = age //property
        get() {
            return field
        }
        set(value) {
            println("setAge: $value")
            field = value
        }
}

2.八、屬性引用

fun main() {
    val ageRef = Person::age  // 未綁定 Receiver
    val person = Person(18, "Test1")
    val nameRef = person::name  // 綁定 Receiver
    ageRef.set(person, 20)  // 須要傳 Receiver
    nameRef.set("Test2") // 不須要傳 Receiver
}

2.九、Kotlin 中的類和接口回顧

類和接口小結

3、Kotlin 中的擴展方法

<font face= 黑體>擴展方法的意思就是類中原本沒有定義某個方法,咱們能夠給它擴展一個,也就是加一個方法。Java 是沒有擴展方法這個概念的。

3.一、擴展方法的定義

<font face= 黑體>好比說我要給 String 類定義一個檢驗郵箱是否合法的擴展方法,寫法以下:

fun String.isEmail(): Boolean {
    return matches(Regex("郵箱的正則表達式"))
}

<font face= 黑體>調用:

"123456789@qq.com".isEmail()

4、小結

<font face= 黑體>本篇博客主要講了 Kotlin 中的類與接口擴展方法,下一節咱們講空類型安全智能類型轉換

5、源碼

源碼 已上傳至 github,有須要能夠直接下載。

相關文章
相關標籤/搜索