//类 封装 把属性和方法选择性地暴露给外部
/**
希望外部能够使用的属性或方法:公有 开放的 公开的public
不希望给外部使用的属性或方法 :私有的private
private是一种可见性修饰符,private修饰的类、属性、方法其他类不可见(不可调用不可访问)
如何定义属性
1.如果需要外部创建的同时就给属性赋值 需要在构造函数里声明
a.仅仅是接受外面的一个数据用于初始化时候操作class Person constructor(name:String)
此时只是一个临时变量 只能在init这个方法里调用 并不是属性
b.让这个变量变成属性class Person constructor(var name:String)
2.在类里面声明
需要赋初值 (安全访问)
a.知道这个属性的初始值var age:Int = 0
b.需要后面计算才有值,或者可能没值
var name:String? = null
c.延迟初始化 我知道这个属性一定有值 但是还不知道是什么(必须在使用之前赋值 否则报错)
lateinit var address:String
d.//懒加载:在使用时才被初始化(好处:不占用内存)
//不能用var 只能被加载一次
val house:Stringby lazy {
"独栋大别墅"
}
如何访问属性:
通过对象后增加"."来访问 zs.name
如何定义方法
.实例方法 对象方法 普通方法 有对象之后才可以调用
必须创建类的一个对象,用这个对象创建的方法
val xw = Person()
xw.eat("")
2.静态方法 类方法
只有类可以调用 不需要创建类的具体对象,用这个类来直接调用的方法
当类被加载到内存时 这个类的静态属性 和 静态方法 同时被加载
什么情况下适用:不需要具体实例对象
//类方法 伴生对象
companion object{
var instance:String ="Jack"
fun doSomething(){
}
}
*/
//在init方法中可以使用class Person constructor( name:String)
//class Person constructor(var name:String) 公有属性
//class Person constructor(private var name:String) 私有属性
class Person constructor(var name:String){
//属性通常定义在类的开始
class Person {
//属性通常定义在类的开始
var age:Int =0
var name:String? =null
//延迟初始化(必须在使用之前赋值 否则报错)
lateinit var address:String
fun test(){
address ="西大"
println(address)
}
}
fun main() {
val zs = Person()
zs.test()
}
输出结果:西大
//行为或者功能就是函数
//类里面不能有具体的实现 具体的实现放在代码块或函数里
fun eat(food:String):String{
println("狼吞虎咽 $food")
return "坨坨"
}
fun work(subject:String):String{
println("勤勤恳恳工作 $subject")
return "一万块"
}
fun marry(obj:String):String{
println("浪漫的和 $obj结婚")
return "双胞胎"
}