一、前言

<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:

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