(一)单例对象
[讲授]用 object 关键字来创建一个单例对象。单例对象在整个应用程序中只有一个实例,适合用于存放工具方法、常量或共享状态。
package level02
object class05 {
//object 对象名{
// 属性:
// 方法:。。
// }
//单例对象
//只有一个,不能被new
//适用于存放工具,常量。
object MyTool {
//属性
val PI = 3.14
//方法
def Area(r: Double): Double = {
PI * r * r
}
}
def main(args: Array[String]): Unit = {
//对象.属性名
//对象.方法名
println(MyTool.PI)
println(MyTool.Area(10))
}
}
1. 通过object关键字创建的是一个对象,不是一个类型。
2. 不能使用new关键字:声明单例对象的时候不可以使用new关键字。
3. 不能传递参数:单例对象无法传递参数。
(二)伴生类和伴生对象
【讲授定义】 当同名的类和单例对象在同一个源码文件时,这个类称为单例对象的伴生类,对象称为类的伴生对象。
package level02
object class06 {
/**
* 半生类 和 半生对象
* 1.类和对象同名
* 2.在一个文件中
*
* 类就是半生类,对象就是半生对象
*
* 特点:可以相互访问对方的私有成员
*/
class Student() {
//private 修饰的属性,无法在类的外部被访问!
private val hobby ="打篮球"
}
object Student {
def introduce(stu:Student):Unit={
println(s"我的爱好是:${stu.hobby}")
}
}
def main(args: Array[String]): Unit = {
val stu1 = new Student()
//stu1.hobby //无法访问私有属性
Student.introduce(stu1)
}
}
1. 类名和对象名必须同名。
2. 必须在同一个源码文件中。
(三)应用-单例模式
private是私有的意思,这样就会让class不能被new。而通过getInstance可以确保返回的实例就只有一个。
package level02
object class07 {
/**
* 半生类和半生对象,实现一种特殊的编程模式:单例模式
*
*单例模式:让一个类只能有一个实例对象,一个类只能被new一次
*
* 特点:可以相互访问对方的私有成员
*/
//1.把构造函数设置为private
class Student private() {
}
//2.半生对象中,访问private
object Student {
private val instance =new Student()//在办省对下中1可以访问private修饰的构造器
def getintroduce():Student={
instance
}
}
def main(args: Array[String]): Unit = {
val stu1 = Student.getintroduce()
val stu2 = Student.getintroduce()
println(stu1 == stu2)
}
}
package level02
object class07 {
/**
* 半生类和半生对象,实现一种特殊的编程模式:单例模式
*
*单例模式:让一个类只能有一个实例对象,一个类只能被new一次
*
* 特点:可以相互访问对方的私有成员
*/
//1.把构造函数设置为private
class Student private() {
}
//2.半生对象中,访问private
object Student {
private val instance =new Student()//在办省对下中1可以访问private修饰的构造器
def getintroduce():Student={
instance
}
}
def main(args: Array[String]): Unit = {
val stu1 = Student.getintroduce()
val stu2 = Student.getintroduce()
println(stu1 == stu2)
}
}