更新时间:2021-07-16 来源:黑马程序员 浏览量:

    
在Scala中,没有静态方法或静态字段,所以不能用类名直接访问类中的方法和字段,而是创建类的实例对象去访问类中的方法和字段。但是,Scala中提供了object这个关键字用来实现单例模式,使用关键字object创建的对象为单例对象。
创建单例对象的语法格式如下:
object objectName
上述语法格式中,关键字object主要用于创建单例对象;objectName为单例对象的名称。
下面,创建一个单例对象SingletonObject,代码如文件1所示。
文件1 Singleton.scala
   //单例对象
   object SingletonObject {
     def hello() {
       println("Hello, This is Singleton Object")
     }
   }
   object Singleton {
     def main(args: Array[String]) {
       SingletonObject.hello()  
    }
  }上述代码中,第2-4行代码是创建了一个单例对象SingletonObject,并在该对象中定义了一个方法hello();第8-9行代码是主方法main(),并在主方法中使用单例对象访问自己的方法hello()。运行上述文件1中的代码,效果如图1所示。

图1 单例对象的运行结果
在Scala中,在一个源文件中有一个类和一个单例对象,若单例对象名与类名相同,则把这个单例对象称作伴生对象(companion object);这个类则被称为是单例对象的伴生类(companion class)。类和伴生对象之间可以相互访问私有的方法和字段。
下面,定义一个伴生对象Dog,演示操作类中的私有方法和字段。具体代码如文件2所示。
文件2 Dog.scala
   class Dog {
     val id = 666
     private var name = "二哈"
     def printName(): Unit ={
       //在Dog类中可以访问伴生对象Dog的私有字段
       println(Dog.CONSTANT + name)
     }
   }
   //伴生对象
  object Dog{
    //伴生对象中的私有字段
    private var CONSTANT = "汪汪汪。。。"
    //主方法
    def main(args: Array[String]): Unit = {
      val dog = new Dog
      //访问私有的字段name
      dog.name = "二哈666"
      dog.printName()
    }
  }上述代码中,第1-6行代码是创建了一个类Dog,并在该类中定义了两个字段id、name以及一个方法printName();第10-18行代码是创建一个伴生对象Dog,并在该对象中定义一个字段CONSTANT,在主方法main中,创建Dog类的实例对象,再使用实例对象访问类中的字段和方法。
运行上述文件2中的代码,效果如图2所示。

图2 伴生对象访问类中方法和字段的运行结果
1024首播|39岁程序员逆袭记:不被年龄定义,AI浪潮里再迎春天
2025-10-241024程序员节丨10年同行,致敬用代码改变世界的你
2025-10-24【AI设计】北京143期毕业仅36天,全员拿下高薪offer!黑马AI设计连续6期100%高薪就业
2025-09-19【跨境电商运营】深圳跨境电商运营毕业22个工作日,就业率91%+,最高薪资达13500元
2025-09-19【AI运维】郑州运维1期就业班,毕业14个工作日,班级93%同学已拿到Offer, 一线均薪资 1W+
2025-09-19【AI鸿蒙开发】上海校区AI鸿蒙开发4期5期,距离毕业21天,就业率91%,平均薪资14046元
2025-09-19