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類會(huì)默認(rèn)私有化name個(gè)age字段,并且提供get和set方法,person.age其實(shí)是調(diào)用的getAge方法
看轉(zhuǎn)換后的java代碼片段
image.png
image.png
2、如果對name字段不能修改,只能讀取呢?
class Person{
var name="張三"
//私有化name的set方法
private set
var age=20
}
看轉(zhuǎn)換后的java代碼
image.png
3、需求:age默認(rèn)為20,可以對其進(jìn)行重新賦值,但是如果賦值大于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進(jìn)行賦值時(shí)會(huì)棧溢出呢?因?yàn)樗姥h(huán)了
var age=20
set(value) {
if(value<100)
{
this.age=value
}
}
因?yàn)閠his.age本身就在調(diào)用age的set方法(最上面說過了,默認(rèn)私有,并生成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
}
}
}