一、前言
<font face= 黑体>在 Kotlin 学习笔记之内置类型(1)和 Kotlin 学习笔记之内置类型(2)中咱们曾经讲了 Kotlin 内置类型中的根本类型、数组、区间、汇合框架和函数。
二、Kotlin 中的类和接口
2.1、类的定义
Java:
// 简略的类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:
- <font face= 黑体>默认是 public;
- <font face= 黑体>类外部无内容,括号可省略‘
- <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.2、类的实例化
Java:
SimpleClass simpleClass = new SimpleClass(9);System.out.println(simpleClass.x);simpleClass.y();
Kotlin:
val simpleClass = SimpleClass(9)println(simpleClass.x)simpleClass.y()
2.3、接口的定义
Java:
public interface SimpleInf { void simpleMethod();}
Kotlin:
interface SimpleInf { fun simpleMethod()}
2.4、接口的实现
Java:
public class SimpleClass implements SimpleInf { @Override public void simpleMethod() { }}
Kotlin:
class SimpleClass(var x: Int): SimpleInf { override fun simpleMethod() { }}
2.5、抽象类的定义
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.6、类的继承
Java:
public class SimpleClass extends AbsClass implements SimpleInf {}
Kotlin:
class SimpleClass(var x: Int): AbsClass(), SimpleInf {}
2.7、属性 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.8、属性援用
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.9、Kotlin 中的类和接口回顾
三、Kotlin 中的扩大办法
<font face= 黑体>扩大办法的意思就是类中原本没有定义某个办法,咱们能够给它扩大一个,也就是加一个办法。Java 是没有扩大办法这个概念的。
3.1、扩大办法的定义
<font face= 黑体>比如说我要给 String 类定义一个测验邮箱是否非法的扩大办法,写法如下:
fun String.isEmail(): Boolean { return matches(Regex("邮箱的正则表达式"))}
<font face= 黑体>调用:
"123456789@qq.com".isEmail()
四、小结
<font face= 黑体>本篇博客次要讲了 Kotlin 中的类与接口和扩大办法,下一节咱们讲空类型平安和智能类型转换。
五、源码
源码 已上传至 github,有须要能够间接下载。