创建对象的方式:
-
- class → new
-
- 直接通过object来定义(单例对象,只有一个,孤单) 适用于数据存储,提供一些工具方法,公用方法......
kotlin
package level02{
object class06 {
object Myschool {
val name: String = "xxx学校"
def say(): Unit = {
println(s"say:${name}")
}
}
def main(args: Array[String]): Unit = {
// 访问对象的属性
//println(Myschool.name)
// 调用对象的方法
Myschool.say()
}
}
}
伴生类和伴生对象
- 类和对象同名,且在同一文件中,此时,他们互为伴生关系。
- 特点:可以互相访问对方的私有成员
typescript
package level02
object class07 {
class Student(private val password: String) {
private def validatePassword(input: String): Boolean = {
input == password
}
}
object Student {
def check(stu: Student, pwd: String): Boolean = {
stu.validatePassword(pwd)
}
}
def main(args: Array[String]): Unit = {
val stu1 = new Student("12345")
if (Student.check(stu1, "12345")) {
println("验证通过")
}
// 类外部无法访问私有成员,以下代码会编译错误
// if (stu1.validatePassword("12345")) {
// println("验证通过")
// }
}
}
单例模式:一个类(class)只能有一个对象!
- 步骤:
- 不让它new:把构造函数设置为私有的!
- 在伴生对象中调用new来生成一个对象;提供一个方法来获取这个对象
kotlin
package level02
object class08 {
// 构造函数私有,外部无法直接new
class Student private(var name: String, var age: Int) {
}
object Student {
// 伴生对象中创建唯一实例
private val ins = new Student("小花", 18)
// 提供获取实例的方法
def getInstance: Student = ins
}
def main(args: Array[String]): Unit = {
// 外部通过伴生对象的方法获取实例
val stu1 = Student.getInstance
val stu2 = Student.getInstance
// 验证是否为同一个对象
println(stu1 == stu2) // 输出true
}
}