类是对象的抽象,而对象是类的具体实例。类是抽象的,不占用内存,而对象是具体的,占用存储空间。类是用于创建对象的蓝图,它是一个定义包括在特定类型的对象中的方法和变量的软件模板。
在Scala中没有静态修饰符,在object下的成员全部都是静态的,如果在类中声明了与该类相同名字的object则该object是该类的”伴生对象”. 所以对于一个class来说,所有的方法和成员变量在实例被 new 出来之前都是无法访问的
可以理解为Scala把类中的static集中放到了object对象中,伴生对象和类文件必须是同一个源文件,可以用伴生对象做一些初始化操作.
class
编译器会自动帮我们生产一个私有字段和2个公有方法get和set
类只会被编译,不能直接执行,类的声明和主构造器在一起被声明,在一个类中,主构造器只有一个.
类和它的伴生对象可以相互访问其私有成员,class中的main方法没什么用了
object
所有成员变量和方法默认都是 static 的,所以可以直接访问main方法. 所有的main方法都必须在object中被调用,来提供程序的主入口
object不能提供构造器参数,也就是说object 必须是无参的. 因为你不能用new关键字实例化一个单例对象,你没有机会传递给它参数
class Lis {
var age=19
}
object Test{
def main(args: Array[String]): Unit = {
var s=new Lis
s.age=10 //set
println(s.age) //get
}
}
对象本质上拥有类(scala中)的所有特性,除此之外,object还可以有扩展类以及一个或者多个特质:例如,
abstract class ClassName(val parameter){}
object Test extends ClassName(val parameter){}
trait TraitA{}
trait TraitB{}
trait TraitC{}
object Test1 extends TraitA with TraitB with TraitC{}