伴身类

43 阅读1分钟
package level02

/**
 * apply
 *  作用:写在伴生对象中,就可以允许创建对象的时候,省略new
 */
object Base66 {

  // 伴生类
  class Logger(){}
  // 伴生对象
  object Logger {
    val instance = new Logger()
    def apply(): Logger = {
      println("Logger.....")
      instance
    }
  }

  def main(args: Array[String]): Unit = {
    // 创建一个类的对象
    // val log1 = new Logger()
    // 在伴生对象中提供了apply方法,那么这里就会自动去调用它
    val log1 = Logger()
    val log2 = Logger()
    println(log1 == log2) // 这里会输出什么 true ,因为它得到都是同一个对象
  }
}

输出结果

image.png

在面向对象方面,Scala 中一切皆为对象,没有基本数据类型的概念,即使是整数、布尔值等也都是对象。而在函数式编程上,它强调不可变性,鼓励使用纯函数(无副作用的函数),这有助于编写更健壮、易测试的并发程序。