第十一节 get、set

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
        }
    }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容