最适合Android程序员的kotlin笔记

最适合Android程序员的kotlin笔记——类

2019-12-31  本文已影响0人  朱_c713

加深对kotlin中类的理解

kotlin中接口

interface Clickable {
   fun click()
   fun showOff() = println("I am clickable")
}
  1. 实现此接口,必须为click提供实现
  1. 可重新定义showOff()方法,如果对默认行为满意,可以省略。

kotlin中abstract 类

// 这个类是抽象的,不能创建它的实例
abstract  class Animated {
    //这个函数式抽象的,他没有实现,必须被子类重写
    abstract fun animate()
    //抽象类中的非抽象函数,并不是默认open的,但是可以标注为open
    open fun stopAnimating(){
        
    }
    fun animateTwice(){}

}

kotlin中类的继承问题,子类,父类

// 这个类是open的,其他类可以继承他
open class RichButton : Clickable {

    //这个函数是final的,不能在子类中重写它
    fun disable() {}

    //这个函数是open的,可以在子类中重写它
    open fun animate() {}

    //这个函数重写了一个open函数,并且它本身也是open的
    override fun click() {}

    //这里final没有被删减是因为,没有final的override意味着是open的。
    final override fun click() {}
}

枚举

object

kotlin的数据类——data

为类添加data 修饰符,会让你的类成为一个方便的数据容器,上面的这些方法会自动生成好。
并会为类生成标准的,toString, equals,hashCode,方法,并为类添加解构声明。
代码:

data class Client(val name: String, val PostalCode: Int) 

数据类的属性,可以使用var修饰,但我们强烈建议使用val,让属性只读,让数据类的实例不可变
如果想使用这样的实例作为HashMap 或者类似容器的键,这会是必须的要求,因为如果不这样,被用作键的对象在加入容器后被修改了,容器可能会进入一种无效的状态。
不可变对象同样更容易理解,特别是在多线程代码中:一旦一个对象被创建出来,它会一直保持初始状态,也不用担心在你的代码工作时,其他线程修改了对象的值。

val bob=Client("Bob",973293)
print(bob.copy(postalCode = 382555))

打印结果:

Client(name=Bob,postalCode = 382555)

使用顶层函数和属性消除工具类

  1. 类文件的第一行,指明名字即可,如下:
@file:JvmName("AesUtils")
package com.play.myapplication.helper
上一篇下一篇

猜你喜欢

热点阅读