class BackingProgress(name:String){
//定义private修饰的属性,该属性是幕后属性
private var _name:String =name
/**
* 幕后属性主要是实现封装和数据的隐藏,幕后属性允许开发者为类的属性创建一个隐藏的、
* 私有的字段,这个字段只有内部方法可以访问,通过幕后属性,可以将属性的读写操作
* 封装在内部类时间中,对外只暴露安全的访问方法,这样,可以在不破坏封装的前提下,对
* 内部数据执行额外的操作
*/
var name
//重写getter方法,返回幕后属性的值
get() = _name
set(newName){
//执行合理性校验,要求用户名必须在2~6位之间
if (newName.length >6 ||newName.length<2){
println("您设置的人名不符合要求")
}else{
//对幕后属性赋值
_name = newName
}
}
}
fun main(args: Array<String>) {
var p =BackingProgress("李刚")
//访问p.name,实际商会转为访问幕后属性_name
println(p.name)
//对p.name赋值,实际上会转为对幕后属性_name赋值
p.name = "孙悟空"
println(p.name)
}
class User {
lateinit var name: String
lateinit var birth:Date
}
fun main(args: Array<String>) {
var user = User()
// println(user.name) //lateinit property name has not been initialized
user.name ="你好你好"
println(user.name)
}