1、
fun main(args: Array<String>) {
var person=Person()
println(person.age)
println(person.name)
}
class Person{
var name="张三"
var age=20
}
输出:

image.png
这种写法,Person类会默认私有化name个age字段,并且提供get和set方法,person.age其实是调用的getAge方法
看转换后的java代码片段

image.png

image.png
2、如果对name字段不能修改,只能读取呢?
class Person{
var name="张三"
//私有化name的set方法
private set
var age=20
}
看转换后的java代码

image.png
3、需求:age默认为20,可以对其进行重新赋值,但是如果赋值大于100,则赋值无效
fun main(args: Array<String>) {
var person=Person()
println(person.name)
println(person.age)
person.age=80
println(person.age)
}
class Person{
var name="张三"
var age=20
set(value) {
if(value<100)
{
this.age=value
}
}
}
输出:

image.png
为什么打印了name和age再对age进行赋值时会栈溢出呢?因为死循环了
var age=20
set(value) {
if(value<100)
{
this.age=value
}
}
因为this.age本身就在调用age的set方法(最上面说过了,默认私有,并生成get、set方法)
修改:
fun main(args: Array<String>) {
var person=Person()
println(person.name)
println(person.age)
person.age=80
println(person.age)
}
class Person{
var name="张三"
var age=20
set(value) {
if(value<100)
{
field=value
}
}
}