美文网首页最适合Android程序员的kotlin笔记
最适合Android程序员的kotlin笔记——类

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

作者: 朱_c713 | 来源:发表于2019-12-31 17:47 被阅读0次

加深对kotlin中类的理解

  • kotlin的声明默认是final和public的
  • 嵌套类默认并不是内部类:他们并没有包含对其外部类的引用
  • kotlin使用冒号代替javad extends 和implements
  • kotlin 中使用override修饰符是强制要求的
  • 对基类的

kotlin中接口

  • kotlin的接口可以包含抽象方法的定义以及非抽象方法的实现
  • 接口中的方法可以有一个默认实现
  • 接口中不能使用final open 或者abstract
  • 接口中的成员始终是open的,不能生命为final
    案例:
interface Clickable {
   fun click()
   fun showOff() = println("I am clickable")
}
  1. 实现此接口,必须为click提供实现
  1. 可重新定义showOff()方法,如果对默认行为满意,可以省略。

kotlin中abstract 类

  • 和java一样,kotlin有abstract类,这种类同样不能被实例化
  • 一个抽象类通常包含一些么有实现,并且必须在子类中重写的抽象成员
  • 抽象成员始终是open的,不需要显式的使用open修饰符
    示例:
// 这个类是抽象的,不能创建它的实例
abstract  class Animated {
    //这个函数式抽象的,他没有实现,必须被子类重写
    abstract fun animate()
    //抽象类中的非抽象函数,并不是默认open的,但是可以标注为open
    open fun stopAnimating(){
        
    }
    fun animateTwice(){}

}

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

  • java 允许你创建人以类的子类,并重写任意方法。除非显式的使用final关键字进行标注。
  • 对基类进行修改会导致子类的不正确的行为,这就是java“”脆弱的基类问题“”
  • kotlin的类和方法,默认是final的。即不可被继承(实现)或者被复写
  • 如果你想创建父类,需要用open修饰符来标示这个类,此外,每一个可被重写的属性或者方法,都需要添加open修饰符
// 这个类是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() {}
}

枚举

  • kotlin中,enum是一个所谓的软关键字,只有出现在class前才有特殊意义,其他地方可当成普通名称

object

  • object关键字,用来表示单例对象,伴生对象,和对象表达式

kotlin的数据类——data

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

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

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

  • 为了让使用不可变对象的数据变得容易,kotlin编译器为其多生成了一个方法:一个允许copy类的实例的方法,并可以在copy的同事修改某些属性的值——copy方法
val bob=Client("Bob",973293)
print(bob.copy(postalCode = 382555))

打印结果:

Client(name=Bob,postalCode = 382555)

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

  • kotlin中,方法不一定会写在类内部。
    消除方法:
    1.工具类去掉类的包裹,直接全部都是方法
  1. 类文件的第一行,指明名字即可,如下:
@file:JvmName("AesUtils")
package com.play.myapplication.helper
  • java文件中该怎么用怎么用
  • 如果是在kotlin文件中,直接写方法即可,前面的“类点”也给省略了

相关文章

网友评论

    本文标题:最适合Android程序员的kotlin笔记——类

    本文链接:https://www.haomeiwen.com/subject/lkhioctx.html