Kotlin基本语法之(四)成员变量与get、set方法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kotlin基本语法之(四)成员变量与get、set方法相关的知识,希望对你有一定的参考价值。
参考技术A 在之前的文章中我们讲到,Kotlin类中的属性既可以用关键字 var 声明为可变的,也可以用关键字 val 声明为只读的。默认情况下,使用var/val声明的属性可通过对象直接访问,即是public修饰的,除非为属性声明private修饰符。
在Kotlin的世界里成员变量也可被子类复写。同方法的复写一样,需要在父类的成员属性前声明open表示可复写,子类声明override表示重写。
默认情况下属性在声明时必须赋值,除非把属性也声明为abstract的,类中有抽象属性时必须声明为抽象类。
非基本类型的不可空类型(val)的属性可延迟初始化赋值,使用 lateinit 实现该功能。只要保证在使用此属性时已赋值即可,若仍未赋值则会抛出属性尚未初始化异常。
若想避免上述异常可以在使用属性前使用isInitialized方法判断。
默认情况下每个属性都具有getter/setter方法
声明一个属性的完整语法如下:
属性初始值、getter/setter是可缺省,如果属性类型可以从初始值或getter中推断出来则也可缺省。val类型的属性不具备setter。
属性的getter/setter均可复写,即自定义访问器。如果我们定义了一个自定义的setter,那么每次给属性赋值时都会调用它。
来看一个例子:
打印结果:
这里需要解释一下,set方法声明的value是参数名,表示属性实际赋值时的那个对象,约定俗成写做value,可以随意写成其他。
field 指向当前属性,field标识符只能用在属性的访问器内。
若想控制setter访问,可以私有化setter。
Kotlin类与对象 ② ( 主构造函数 | 主构造函数定义临时变量 | 主构造函数中定义成员属性 | 次构造函数 | 构造函数默认参数 )
文章目录
一、主构造函数定义临时变量
在 Kotlin 类中 , 可以在 类声明 时 在 类名后 定义 " 主构造函数 " ;
在 主构造函数 中 , 可以 定义 成员属性 , 并为 成员属性 提供 初始值 ;
在 主构造函数 中 , 可以定义 临时变量 , 临时变量 一般使用 以下划线为开头 的名称 ;
代码示例 :
class Hello(
// 主构造函数,
// 下面的两个参数仅仅用于给成员属性赋值, 只使用一次
// 这种变量称为临时变量, 使用下划线开头
_name: String,
_age: Int
)
var name = _name
var age = _age
fun main()
var hello = Hello("Tom", 18)
println(hello.name + " , " + hello.age)
执行结果 :
Tom , 18
二、主构造函数中定义成员属性
在主构造函数中 定义临时变量 , 格式为 :
class 类名(_临时变量名: 临时变量类型)
在主构造函数中也可以 定义成员属性 , 格式为 :
class 类名(var 成员属性名: 成员属性类型)
代码示例 :
class Hello(
// 主构造函数, 直接在主构造函数中定义属性
var name: String,
var age: Int
)
fun main()
var hello = Hello("Tom", 18)
println(hello.name + " , " + hello.age)
执行结果 :
Tom , 18
三、次构造函数
Kotlin 类只允许 在定义类时 定义 一个主构造函数 , 在其中可以定义 临时变量 , 也可以定义 属性变量 ;
次构造函数 定义在 Kotlin 内部 , 可以定义 多个 次构造函数 , 每个次构造函数都可以有不同的参数组合 ;
定义次构造函数后 , 必须调用主构造函数 , 并且为每个主构造函数 的 参数设置 参数值 ;
次构造函数中可以实现代码逻辑 , 作为主构造函数的补充 ;
代码示例 : 下面代码中 , 次构造函数 必须 调用主构造函数 , 如 name 和 age 参数必须设置默认值 name = "Jerry", age = 12
;
class Hello(
// 主构造函数, 直接在主构造函数中定义属性
var name: String,
var age: Int,
// 定义临时变量
_isStudent: Boolean
)
var isStudent = _isStudent
// 次构造函数
constructor(isStudent: Boolean): this(name = "Jerry", age = 12, isStudent)
// 代码逻辑
println("次构造函数 : name = $name, age = $age, isStudent = $isStudent")
fun main()
var hello = Hello("Tom", 18, true)
println(hello.name + " , " + hello.age)
var hello2 = Hello(false)
println(hello2.name + " , " + hello2.age)
执行结果 :
Tom , 18
name = Jerry, age = 12, isStudent = false
Jerry , 12
四、构造函数默认参数
在定义 构造函数 时 , 可以为 构造函数 的参数 指定 默认值 , 如果 用户传入了 值参 则 使用用户传入的值 , 如果用户没有传入值 则 使用该 默认值 ;
如果 构造函数 参数有 指定默认值 , 可以不为其传递 值参 , 构造函数中跳过该参数 , 其 后面的参数需要使用 参数名 = 参数值
进行赋值 ;
代码示例 :
class Hello(
// 主构造函数, 直接在主构造函数中定义属性
var name: String,
var age: Int = 18,
var isStudent: Boolean
)
fun main()
// 如果不传入 age 参数, 则 age 后的参数需要写明参数名称
var hello = Hello("Tom", isStudent = true)
println(hello.name + " , " + hello.age + " , " + hello.isStudent)
执行结果 :
Tom , 18 , true
以上是关于Kotlin基本语法之(四)成员变量与get、set方法的主要内容,如果未能解决你的问题,请参考以下文章
Android:Kotlin详细入门学习指南-基本类型-基础语法
Kotlin类与对象 ② ( 主构造函数 | 主构造函数定义临时变量 | 主构造函数中定义成员属性 | 次构造函数 | 构造函数默认参数 )