<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,有须要能够直接下载。