大三寒假学习 spark学习 Scala面向对编程 对象(单例对象和伴生对象)

单例对象:

  • Scala采用单例对象(singleton object)来实现与Java静态成员同样的功能。
  • 使用object 关键字定义单例对象。

  

  代码示例

object person {
    private var lastId=0//一个人的身份编号
    def newPersonId()={
        lastId +=1
        lastId
    }
}
printf("The first person id is %d.n" ,person.newPersonId())
printf("The second person id is %d.\n",person.newPersonId())
printf("The third person id is %d.\n",person.newPersonId())

 

伴生对象:

  • 当一个单例对象和它的同名类一起出现时,这时的单例对象被称为这个同名类的“伴生对象” (companion object)。相应的类被称为这个单例对象的“伴生类”
  • 类和它的伴生对象必须存在于同一个文件中,可以相互访问私有成员。
  • 没有同名类的单例对象,被称为孤立对象(standalone object)。一般情况下,Scala程序的入口点main方法就是定义在一个孤立对象里。
class Person {
    private val id = Person.newPersonId()//调用了伴生对象中的方法private var name = ""
    def this(name: String){
        this()
        this.name = name
    }
    def info() { printf( "The id of %s is %d.\n",name,id)}
}
object Person {
    private var lastId = 0//一个人的身份编号
    private def newPersonId()={
        lastId +=1
        lastId
    }
    def main(args: Array[String]){
        val person1 = new Person("ziyu")
        val person2 = new Person("Minxing")
        person1.info()
        person2.info()
    }
}

先编译后与运行

 从上面结果可以看出,伴生对象中定义的newPersonId)实际上就实现了Java中静态(static)方法的功能

Scala源代码编译后都会变成JVM字节码实际上,在编译上面的源代码文件以后在Scala里面的class和object在Java层面都会被合二为一,class里面的成员成了实例成员,object成员成了static成员)

应用程序对象:

  每个scala应用程序都必须从一个对象的main方法开始

  

原文地址:https://www.cnblogs.com/fengchuiguobanxia/p/15794901.html