🦴单例对象
创建对象的方法:
- 1.class+new
- 2.直接通过object来定义(单例(对象只有一个,孤单),适用于数据存储,提供一些工具方法,公用方法....
package level02
object Class07 {
object Myschool {
val name:String="xxx学校"
def say():Unit={
println(s"say:${name}")
}
}
def main(args: Array[String]): Unit = {
//对象名.属性名
Myschool.name
//对象名.方法名
Myschool.say()
}
}
🦴类和对象
- 1.类(class)和对象(object)同名,且在同一个文件,此时他们互为伴生关系
- 2.伴生类,伴生对象
- 3.特点:可以相互访问对方的私有(private)成员
package level02
object Class08 {
class Student(private val password:String) {
private def validatePassword(input:String):Boolean={
input == password
}
}
object Student {
def check(stu:Student,pwd:String):Boolean= {
//在伴生对象的内部,可以访问类的private成员
stu.validatePassword(pwd)
}
}
def main(args: Array[String]): Unit = {
val stu1=new Student("12345")
if(Student.check(stu1,"12345")){
println("验证通过!")
}
//在类的外部,无法访问类的private成员
// if(stu1.validatePassword("12345")){
// println("验证通过!")
// }
}
}
- 4.new会自动调用构造函数(思路:不让他new,把构造函数设置为私有的)
- 5.添加了private之后,构造函数在类的外部就不可以访问
package level02
object Class09 {
// 添加了private之后,构造函数在类的外部不可访问
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 = new Student("小明", 18) // 此处会报错,因为构造函数被private修饰
// val stu2 = new Student("小明", 18) // 同理不可访问
val stu1 = Student.getInstance
val stu2 = Student.getInstance
println(stu1 == stu2) // 输出true,因为是同一个单例对象
}
}