目录

  • 1. 类

    • 构造方法
    • 属性
    • field后备字段
  • 2. 接口

在看下面之前,先要知道几个概念

  1. Java的类和方法默认都是open的,而Kotlin默认的都是final的,所以要想在kotlin中定义一个可以重写的类或者方法,记得添加open。
  2. 因为接口设置的方法都是待重写的属性和方法,所以默认都是open的
  3. 抽象类可以理解成一半类,一半接口,只要你声明了abstrat,就说明它希望被覆盖,所以声明了abstrat的属性和方法是默认open的。
  4. 只要你重写了一个方法或属性,也就是它们用override修饰了,就一定是open的,可能需要你用final进行限制

1. 类

构造方法

每个类构造方法有一个主构造器和多个次构造器组成。主构造器要写到类声明那一行中,参数可以定义成var或者val,可以初始化,而且其他初始代码块要用init来包裹。

class Person constructor(var firstName: String = "") {init {println("FirstName is $firstName")}
}

次构造方法一定要加前缀consructor,引入主构造函数,因为主构造函数是创建代码主要途径,次构造方法只能在主构造函数的基础上添加功能。

class Person(val name: String) {constructor (name: String, age:Int) : this(name) {// 初始化...}
}

属性

var声明可变的属性,默认实现gettter和setter。val声明不可变属性,默认实现getter,不能写setter。

调用直接用对象.属性名就可以,实际上就是在调用他的getter和setter方法。getter权限跟字段一样,setter可以跟字段不一致。

class Person {var lastName: String = "zhang"get() = field.toUpperCase()   // 将变量赋值后转换为大写private set
}

field后备字段

不使用后备字段而是使用类字段,实际上相当于调用这个类字段的getter和setter方法

class People {var name: Stringget() = nameset(value) {name = value}
}// 相当于setter和getter都递归调用了
public final class People {@NotNullpublic final String getName() {return this.getName();}public final void setName(@NotNull String value) {Intrinsics.checkParameterIsNotNull(value, "value");this.setName(value);}
}// 所以我们要用后备字段,后备字段仅仅用于getter和setter中
class People {var name: String = "Mike"get() = fieldset(value) {field = value}
}

2. 接口

接口的属性要么是抽象的,要么要提供访问器的实现,不能出现后备字段。

实现接口的类只需要定义自己缺少的实现

interface Named {val name: String
}interface Person : Named {val firstName: Stringval lastName: Stringoverride val name: String get() = "$firstName $lastName"
}
data class Employee(// 不必实现“name”override val firstName: String,override val lastName: String,val position: Position
) : Person

kotlin学习之类(三)相关推荐

  1. kotlin学习(三)-------方便好用的字符串特性

    回顾Java 我们如果要使用字符串的时候,如果要输出一些方法返回的字符串,我们通常要这样 @Overridepublic String toString() {return "Person{ ...

  2. Kotlin学习日志(三)控制语句

    一.条件分支 1.1 简单分支 最简单的分支莫过于if-else了吧,Java中相信都用过,那么在Kotlin中又是怎么用的呢?其实也比较类似,来看看吧! 布局文件中: <TextViewand ...

  3. Kotlin学习记录(三)—— 子线程获取数据,实现简单ListView

    接上篇:Kotlin的变量.属性.类.构造函数.继承.方法 上一篇简单介绍了Kotlin的一些基础构成,当然还有像对象声明.操作符等等都未涉及到,这些会在以后用到的过程中进行详细说明. 项目中List ...

  4. Kotlin学习笔记-基础语法

    去年学习过一遍Kotlin,相比java而言,Kotlin确实有许多方便的地方,但是学习之后一直没有真正拿来写项目,很久不用很多东西都已经忘记了.最近Google宣布Kotlin成为Android开发 ...

  5. Kotlin 学习笔记(八)—— Kotlin类与对象之接口

    Kotlin 学习笔记(八)-- Kotlin类与对象之接口 Kotlin学习笔记系列教程 Kotlin 学习笔记(一)-- 概述.学习曲线.开发工具.参考资料 Kotlin 学习笔记(二)-- 基础 ...

  6. Kotlin学习笔记(3)- 语法

    系列文章全部为本人的学习笔记,若有任何不妥之处,随时欢迎拍砖指正.如果你觉得我的文章对你有用,欢迎关注我,我们一起学习进步!kotlin学习笔记系列首发简书和CSDN Kotlin学习笔记(1)- 环 ...

  7. Kotlin学习笔记(1)- 环境配置

    系列文章全部为本人的学习笔记,若有任何不妥之处,随时欢迎拍砖指正.如果你觉得我的文章对你有用,欢迎关注我,我们一起学习进步!kotlin学习笔记系列首发简书和CSDN Kotlin学习笔记(1)- 环 ...

  8. kotlin学习目录

    目录 kotlin学习之基础(一) kotlin学习之函数(二) kotlin学习之类(三) kotlin学习之类的扩展(四) kotlin学习之密封类(五) kotlin学习之嵌套类和内部类(六) ...

  9. Kotlin 学习笔记(七)—— Kotlin类与对象之属性与字段

    Kotlin 学习笔记(七)-- Kotlin类与对象之属性与字段 Kotlin学习笔记系列教程 Kotlin 学习笔记(一)-- 概述.学习曲线.开发工具.参考资料 Kotlin 学习笔记(二)-- ...

  10. Kotlin学习笔记20 阶段复习2

    参考链接 示例来自bilibili Kotlin语言深入解析 张龙老师的视频 lambda表达式 内联函数 Kotlin学习笔记 第三章 函数 高阶函数 lambda表达式 内联函数_积跬步 至千里- ...

最新文章

  1. java非静态块,在java中使用非静态块有什么用?
  2. java 构造器 血药主题_java中的构造器
  3. Docker 安装MySQL以及外部访问
  4. DataWorks OpenAPI企业开发实战-运维监控大屏
  5. Android学习笔记---19_采用ListView实现数据列表显示,以及各种适配器使用,和如何写自己的适配器
  6. IOS开发-关于自定义TabBar条
  7. Haproxy反向代理WebSocket的方法
  8. Struts2.3.1.2安装
  9. Axure RP入门知识-基础功能介绍
  10. 跟同事聊工作,不要用哦,可以用收到、明白、好、知道等词代替
  11. 手把手教你ssm整合 超级详细
  12. 组装一台电脑需要选购哪些基本部件
  13. Windows server 2016成为域控制器,将客户机加入域
  14. 高中python编程例题-Python进入高中教学
  15. python判断是否闰年_【python实例】判断输入年份是否是闰年
  16. githubPC端下载地址
  17. linux drm 内存管理,linux DRM GEM 笔记
  18. 关于 JavaScript 中 null 的一切
  19. 利用单片机控制74HC595显示图案
  20. 主动降噪耳机哪个好?2021年双11主动降噪耳机推荐!

热门文章

  1. 应用层勾子IAT HOOK(源码)
  2. cocos2d-x游戏实例(4)-地图碰撞
  3. python爬虫 爬取bilibili新番榜
  4. 第21讲:IP代理池的搭建和使用
  5. 扔掉,MySQL!性能被 MariaDB 吊打…
  6. 计算机基础- -应用和硬件的关系
  7. HashMap源码解析(JDK1.8)
  8. ffmpeg基础库编程开发 读书笔记
  9. go context之WithTimeout的使用
  10. 导入依赖和加上注释后,lombok gettersetter识别不到