伴生类

206 阅读2分钟

1. 伴生类的定义

  • 定义:在 Scala 中,若一个类和一个同名的单例对象在同一个源文件中定义,这个类就称为该单例对象的伴生类,对应的单例对象称为该类的伴生对象。

格式:

csharp

object 对象名{

属性

方法

}

(二)伴生类和伴生对象

当同名的类和单例对象在同一个源码文件时,这个类称为单例对象的伴生类,对象称为类的伴生对象。 实例:

kotlin
 体验AI代码助手
 代码解读
复制代码
object Person {

}

class Person{

}

说明: 1. 类名和对象名必须同名。

2. 必须在同一个源码文件中。

[编码示例] :访问私有方法:

typescript

class User  (val username: String, private val password: String) {

  // 伴生类的私有方法

  private def  validatePassword(input: String): Boolean = {

    input == password  
}

}

object User{

  def check(u: User, pwd: String):Boolean = {

    u.validatePassword(pwd)

  }

}

object Test {

  def main(args: Array[String]): Unit = { // 入口函数

    var u1 = new User("小明", "123456")

    print(User.check(u1, "123456"))

  }

}

2. 伴生类的作用和格式

  • 作用

    • 伴生类和伴生对象可以相互访问对方的私有成员(包括私有构造方法、私有属性、私有方法等)。
    • 可以将与类相关的工具方法、工厂方法等放在伴生对象中,使代码组织更合理。

格式:

arduino

// 伴生类
class Person(private val name: String, private val age: Int) {
  def sayHello(): Unit = {
    println(s"Hello, I'm ${name}, ${age} years old.")
  }
}

// 伴生对象(与Person类同名,在同一源文件中)
object Person {
  // 工厂方法,用于创建Person对象
  def apply(name: String, age: Int): Person = new Person(name, age)
  
  // 可以访问伴生类的私有成员,这里演示访问私有构造
  def createAnonymous: Person = new Person("Anonymous", 0)
}

3. 单例对象的定义

  • 定义:通过 object 关键字定义的对象,在程序运行中仅实例化一次,属于单例模式的实现。

4. 单例对象的作用和格式

  • 作用

    • 作为程序入口(main 方法需定义在单例对象中)。
    • 实现工具类,封装通用方法(如字符串处理、数学计算)。
    • 实现单例模式,保证全局唯一实例。
    • 作为伴生对象,与伴生类协作。
  • 格式

typescript

// 工具类形式的单例对象
object StringUtil {
  def isEmpty(s: String): Boolean = s == null || s.trim.isEmpty
  def reverse(s: String): String = s.reverse
}

// 程序入口形式的单例对象
object AppEntry {
  def main(args: Array[String]): Unit = {
    println("Program starts here!")
    val isEmpty = StringUtil.isEmpty("  ")
    println(s"Is empty? $isEmpty")
  }
}