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

加深对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文件中,直接写方法即可,前面的“类点”也给省略了
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342