Scala单例
Scala是完全面向对象的语言,所以没有静态的操作,即在Scala中没有静态的概念。但是可以通过单例对象来模拟类对象。若单例对象名与类名一致,则称该单例对象为这个类的伴生对象,这个类的所有静态内容都可以放在它的伴生对象之中声明。
语法
object Person{
val country:String="China"
}
- 单例对象采用object关键字声明
- 单例对象对应的类称之为伴生类,伴生对象的名称与伴生类一致
- 单例对象的属性和方法可以通过伴生对象直接调用使用
object Scala20_Object {
def main(args: Array[String]): Unit = {
//(3)伴生对象中的属性和方法都可以通过伴生对象名(类名)直接调用访问。
println(User20.name)
// println(User20.age) //类不能直接调用属性
}
}
//(1)伴生对象采用object关键字声明
object User20 {
var name: String = "zhangsan"
}
//(2)伴生对象对应的类称之为伴生类,伴生对象的名称应该和伴生类名一致。
class User20 {
var age: Int = 18
}
apply
package cn.lpc.Cheapter06
object Scala16_apply {
def main(args: Array[String]): Unit = {
// // 使用new 构造对象时,等同于调用类的构造方法
// val user = new User16()
//
// //Scala中可以使用伴生对象的apply方法直接构建类对象
// val user2 = User16.apply()
// // Scala可以自动识别伴生对象的apply方法,所以apply方法可以省略。
// // 编译器自动做
// // apply方法不能省略参数列表的小括号,会导致使用有问题
// // apply强大在可以转换类型,可以返回不是伴生对象本身的类型
// val user3 = User16()
// val user4 = User16("weq")
//
// //
new Range(1,2,4)
Range(1,3,4) ==> apply()方法
// }
}
}
//class User16(name: String = "sad"){
//
//}
//
//object User16{
// def apply(): User16 = new User16()
// def apply(name: String): User16 = new User16(name)
// // 使用apply返回不同的对象
// def apply(Date : String) = {
// "dasasd"
// }
//
//}