首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Kotlin 面向對象編程詳解(一):類、構造函數、繼承與密封類

     編輯:Java 相關知識

類聲明與構造函數體系

最簡類定義

class ClassDemo // 無花括號也合法

主構造函數

直接在類頭聲明參數,配合 init 塊執行初始化邏輯:

class ClassDemo constructor(type: String) {
    init { println("主構造函數參數: $type") }
    var prop1 = type // 參數可直接用於屬性初始化
    var prop2: String = type // 顯式類型聲明
}

次構造函數

類體內使用 constructor 關鍵字,必須委托主構造函數:

class ClassDemo(val type: String) {
    constructor(type: String, extra: String) : this(type) {
        println("次構造函數: $type $extra")
    }
}

屬性聲明簡化

// 主構造函數參數加 var/val 直接成為屬性
class User(val name: String, var age: Int = 18)

// 等同於 Java
// private final String name;
// private int age;
// public User(String name, int age) { this.name=name; this.age=age; }
// public String getName() { return name; }
// public void setAge(int age) { this.age=age; }

可見性修飾符

  • 默認 public(無修飾符)
  • private、protected、internal(模塊內可見)
  • 構造函數私有化實現單例:class Singleton private constructor()

繼承機制

基礎繼承

open class Base(val id: Int) // 必須 open 才能被繼承
class SubClass(id: Int, val name: String) : Base(id)

方法重寫規則

  • 父類方法需 open,子類用 override
  • 重寫後默認 open,可加 final 禁止再次重寫
  • 多繼承衝突用 super<Base>.method() 顯式指定
open class Base { open fun foo() {} }
interface Ifc { fun foo() {} }
class Sub : Base(), Ifc {
    final override fun foo() {
        super<Base>.foo()
        super<Ifc>.foo()
    }
}

密封類

受限層級結構,子類固定且可攜帶狀態(枚舉增強版):

sealed class Expr {
    data class Const(val number: Double) : Expr()
    data class Sum(val left: Expr, val right: Expr) : Expr()
    object NotANumber : Expr()
}

// when 表達式編譯器檢查窮盡性
fun eval(e: Expr): Double = when(e) {
    is Expr.Const -> e.number
    is Expr.Sum -> eval(e.left) + eval(e.right)
    Expr.NotANumber -> Double.NaN
}

對象創建與解構

val user = User("Alice", 25)
val (name, age) = user // 解構聲明
println("$name is $age")

完整代碼倉庫

GitHub:helloKotlin | 本站下載:源碼包

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved