单例对象语法
1)基本语法
object Person{
val country:String="China"
}
2)说明
(1)单例对象采用object关键字声明
(2)单例对象对应的类称之为伴生类,伴生对象的名称应该和伴生类名一致。
(3)单例对象中的属性和方法都可以通过伴生对象名(类名)直接调用访问。
apply方法
1)说明
(1)通过伴生对象的apply方法,实现不使用new方法创建对象。
(2)如果想让主构造器变成私有的,可以在()之前加上private。
(3)apply方法可以重载。
(4)Scala中obj(arg)的语句实际是在调用该对象的apply方法,即obj.apply(arg)。用以统一面向对象编程和函数式编程的风格。
(5)当使用new关键字构建对象时,调用的其实是类的构造方法,当直接使用类名构建对象时,调用的其实时伴生对象的apply方法。
1. object对象
此对象含义,不是类的实例的意思,就是object的直译。object是scala中一种和class平级的语法结构。为啥要有object?
scala运行最后要到jvm运行,jvm运行需要main函数,java中的main数,必须是public的,必须是static的,必须是void的!请问static在scala中能否做到?scala中没有静态这个概念!
所以于是乎,scala提供了一种结构object,来模拟java中的静态的行为,比如静态成员变量,静态方法。
2. 伴生类(对象)
scala中把在同一个scala源文件中定义的名称相同的class和object,互相称之为object的伴生类和class的伴生对象。
使用scala中的伴生对象的结构,就可以给一个普通的scala类添加类似java中的静态的行为,丰富class的api操作。
同时,有了伴生对象,并且覆盖了其中的apply(参数列表)方法,在创建对象的时候就可以省略new关键字,但是需要注意一点的是,apply的参数列表最好和class对应的构造器保持一致,同时返回值为class的类型。