<font face= 黑體>在 Kotlin 學習筆記以內置類型(1)和 Kotlin 學習筆記以內置類型(2)中咱們已經講了 Kotlin 內置類型中的基本類型、數組、區間、集合框架和函數。java
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
// 簡單的類 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) { // 主構造器 }
Java:正則表達式
SimpleClass simpleClass = new SimpleClass(9); System.out.println(simpleClass.x); simpleClass.y();
Kotlin:segmentfault
val simpleClass = SimpleClass(9) println(simpleClass.x) simpleClass.y()
Java:數組
public interface SimpleInf { void simpleMethod(); }
Kotlin:安全
interface SimpleInf { fun simpleMethod() }
Java:框架
public class SimpleClass implements SimpleInf { @Override public void simpleMethod() { } }
Kotlin:ide
class SimpleClass(var x: Int): SimpleInf { override fun simpleMethod() { } }
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(){} }
Java:
public class SimpleClass extends AbsClass implements SimpleInf { }
Kotlin:
class SimpleClass(var x: Int): AbsClass(), SimpleInf { }
<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 } }
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 }
<font face= 黑體>擴展方法的意思就是類中原本沒有定義某個方法,咱們能夠給它擴展一個,也就是加一個方法。Java 是沒有擴展方法這個概念的。
<font face= 黑體>好比說我要給 String 類定義一個檢驗郵箱是否合法的擴展方法,寫法以下:
fun String.isEmail(): Boolean { return matches(Regex("郵箱的正則表達式")) }
<font face= 黑體>調用:
"123456789@qq.com".isEmail()
<font face= 黑體>本篇博客主要講了 Kotlin 中的類與接口和擴展方法,下一節咱們講空類型安全和智能類型轉換。
源碼 已上傳至 github,有須要能夠直接下載。