乐趣区

关于android:Kotlin-中的类与接口

一、前言

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

退出移动版