kotlin学习之类(三)
目录
- 1. 类
- 构造方法
- 属性
- field后备字段
- 2. 接口
在看下面之前,先要知道几个概念
- Java的类和方法默认都是open的,而Kotlin默认的都是final的,所以要想在kotlin中定义一个可以重写的类或者方法,记得添加open。
- 因为接口设置的方法都是待重写的属性和方法,所以默认都是open的
- 抽象类可以理解成一半类,一半接口,只要你声明了abstrat,就说明它希望被覆盖,所以声明了abstrat的属性和方法是默认open的。
- 只要你重写了一个方法或属性,也就是它们用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学习之类(三)相关推荐
- kotlin学习(三)-------方便好用的字符串特性
回顾Java 我们如果要使用字符串的时候,如果要输出一些方法返回的字符串,我们通常要这样 @Overridepublic String toString() {return "Person{ ...
- Kotlin学习日志(三)控制语句
一.条件分支 1.1 简单分支 最简单的分支莫过于if-else了吧,Java中相信都用过,那么在Kotlin中又是怎么用的呢?其实也比较类似,来看看吧! 布局文件中: <TextViewand ...
- Kotlin学习记录(三)—— 子线程获取数据,实现简单ListView
接上篇:Kotlin的变量.属性.类.构造函数.继承.方法 上一篇简单介绍了Kotlin的一些基础构成,当然还有像对象声明.操作符等等都未涉及到,这些会在以后用到的过程中进行详细说明. 项目中List ...
- Kotlin学习笔记-基础语法
去年学习过一遍Kotlin,相比java而言,Kotlin确实有许多方便的地方,但是学习之后一直没有真正拿来写项目,很久不用很多东西都已经忘记了.最近Google宣布Kotlin成为Android开发 ...
- Kotlin 学习笔记(八)—— Kotlin类与对象之接口
Kotlin 学习笔记(八)-- Kotlin类与对象之接口 Kotlin学习笔记系列教程 Kotlin 学习笔记(一)-- 概述.学习曲线.开发工具.参考资料 Kotlin 学习笔记(二)-- 基础 ...
- Kotlin学习笔记(3)- 语法
系列文章全部为本人的学习笔记,若有任何不妥之处,随时欢迎拍砖指正.如果你觉得我的文章对你有用,欢迎关注我,我们一起学习进步!kotlin学习笔记系列首发简书和CSDN Kotlin学习笔记(1)- 环 ...
- Kotlin学习笔记(1)- 环境配置
系列文章全部为本人的学习笔记,若有任何不妥之处,随时欢迎拍砖指正.如果你觉得我的文章对你有用,欢迎关注我,我们一起学习进步!kotlin学习笔记系列首发简书和CSDN Kotlin学习笔记(1)- 环 ...
- kotlin学习目录
目录 kotlin学习之基础(一) kotlin学习之函数(二) kotlin学习之类(三) kotlin学习之类的扩展(四) kotlin学习之密封类(五) kotlin学习之嵌套类和内部类(六) ...
- Kotlin 学习笔记(七)—— Kotlin类与对象之属性与字段
Kotlin 学习笔记(七)-- Kotlin类与对象之属性与字段 Kotlin学习笔记系列教程 Kotlin 学习笔记(一)-- 概述.学习曲线.开发工具.参考资料 Kotlin 学习笔记(二)-- ...
- Kotlin学习笔记20 阶段复习2
参考链接 示例来自bilibili Kotlin语言深入解析 张龙老师的视频 lambda表达式 内联函数 Kotlin学习笔记 第三章 函数 高阶函数 lambda表达式 内联函数_积跬步 至千里- ...
最新文章
- java非静态块,在java中使用非静态块有什么用?
- java 构造器 血药主题_java中的构造器
- Docker 安装MySQL以及外部访问
- DataWorks OpenAPI企业开发实战-运维监控大屏
- Android学习笔记---19_采用ListView实现数据列表显示,以及各种适配器使用,和如何写自己的适配器
- IOS开发-关于自定义TabBar条
- Haproxy反向代理WebSocket的方法
- Struts2.3.1.2安装
- Axure RP入门知识-基础功能介绍
- 跟同事聊工作,不要用哦,可以用收到、明白、好、知道等词代替
- 手把手教你ssm整合 超级详细
- 组装一台电脑需要选购哪些基本部件
- Windows server 2016成为域控制器,将客户机加入域
- 高中python编程例题-Python进入高中教学
- python判断是否闰年_【python实例】判断输入年份是否是闰年
- githubPC端下载地址
- linux drm 内存管理,linux DRM GEM 笔记
- 关于 JavaScript 中 null 的一切
- 利用单片机控制74HC595显示图案
- 主动降噪耳机哪个好?2021年双11主动降噪耳机推荐!