Kotlin从入门到放弃之基础篇(四)——属性、字段、接口
来源:互联网 发布:java ee 64位下载 编辑:程序博客网 时间:2024/06/11 05:14
Kotlin从入门到放弃之基础篇(四)
属性和字段
属性声明
在Kotlin中我们使用var关键字声明可变属性,或者用val关键字声明只读属性。
public class Person{ var name:String ="小明" var age: Int = 18 val gender:String="男" }
我们可以像Java中那样可以通过名称直接使用一个属性
public class printPerson{ var person = Person() print("name=${person.name}") }
Getters and Setters
声明一个属性的完整语法如下:
var <propertyName>: <PropertyType> [=<property_initializer>] [<getter>] [<setter>]
其中initializer,getter和setter都是可选的。其中var关键字修饰的属性是允许有getter和setter方法的,但是val关键字修饰的属性是final类型的不允许有setter方法。
另外,能够从成员函数或者初始化语句中推断出属性的类型,那么在属性声明的时候是可以忽略PropertyType的。
备用字段
在Kotlin中不可以有字段。然而当使用自定义访问器的时候需要备用字段,所以Kotlin使用field关键字提供了自动备用字段。
var counter=0 set(value){ if(value>=0) filed = value }
♣ field关键字只能用于属性的访问器
编译器会检查访问器的代码,如果使用了备用字段(或者访问器是默认的实现逻辑),就会自动生成备用字段,否则就不会。
备用属性
如果备用字段不合适的话可以试试备用属性。备用属性隐式的对属性值的初始化声明避免空指针
private var _table: Map<String, Int>? = null public val table: Map<String, Int> get() { if (_table == null) _table = HashMap() return _table ?: throw AssertionError("Setto null by another thread") }
编译时常量
那些在编译时就知道具体值的属性可以使用const关键字标记为编译时常量。该属性需要满足以下条件:
♣ 顶层或对象的成员
♣ 使用基本类型进行初始化
♣ 不能有自定义的getter方法
该属性可以被当作注解使用:
const val SUBSYSTEM_DEPRECATED: String = "This subsystem is deprecated"@Deprected(SUBSYSTEM_DEPRECATED) fun foo() { ... }
延迟初始化属性
那些拥有非空类型的属性,需要在构造器中进行初始化,但是有时构造器并不能满足所有需求。如果我们希望延迟属性初始化的时间,就可以用到lateinit关键字。
public class Person{ lateinit var student : Stuent }
这个修饰符只能用在被var关键字修饰的属性中,不能用在构造方法中。并且,该属性不能有自定义的getter和setter访问器。这个属性必须是非空的,同时,也不能是一个基本类型
接口
接口的定义
Kotlin中的接口很想Java8。可以包含抽象方法和方法的实现,但是接口不能保存状态,意味着接口中的属性必须是抽象的,或者提供访问器的实现方式。
interface DoSomething{ fun run()//没有方法体 fun swim(){ //有方法体 } }
接口的实现
一个类可以实现多个接口
class Person : DoSomething{ fun run(){ print("this is run") } }
接口中的属性
接口中可以存在抽象的属性,但是可以提供访问器的实现。接口中的属性不能有备用字段。
interface DoSomething{ val person : Person //默认为abstract }
关于重写冲突
在之前的章节中有详细的讨论,不再赘述
- Kotlin从入门到放弃之基础篇(四)——属性、字段、接口
- Kotlin从入门到放弃之基础篇(一)——基本数据类型
- Kotlin从入门到放弃之基础篇(二)——包和控制流
- Kotlin从入门到放弃之基础篇(三)——类和继承
- Kotlin从入门到放弃之基础篇(五)——修饰词、扩展、数据类
- kotlin——从入门到放弃
- Kotlin从入门到放弃之基础篇(六)——泛型、嵌套类、枚举类、对象表达式
- Kotlin从入门到放弃之准备篇——基本语法
- Kotlin从入门到放弃(三)——协程
- Swift3.0从入门到放弃(四)-基础最终篇
- 【Kotlin从入门到深坑】之类的属性和字段
- 【Kotlin从入门到深坑】之类的属性和字段
- Kotlin从入门到“放弃”(一)
- JavaScript从入门到放弃(四)
- 【Kotlin从入门到深坑】之基础类型
- Kotlin从入门到『放弃』系列 视频教程
- Kotlin从入门到『放弃』系列 视频教程
- Git从入门到放弃——Git命令篇
- css背景样式 列表样式 盒子模型 浮动
- Maximum Subsequence Sum
- 51nod-1380
- bzoj4916
- 【高精度】大整数类
- Kotlin从入门到放弃之基础篇(四)——属性、字段、接口
- ios 在FSCalendar基础上开发的签到功能 记录一下 不是太完善
- centos7下yum换阿里云源
- 二进制数中1的个数(拓展-比较二进制数AB不同)
- POJ3304 计算几何--判断直线与线段相交
- 2017网易8个编程题
- linux find命令思维导图
- 整理一下React native的填坑指南
- newFixedThreadPool线程池