scala教程:object伴生对象 和 伴生类

伴生对象 和 伴生类

  1. 定义一个 class 并在这里面实现所有的 实例属性 和 实例方法

  2. 添加一个 object ,这个 object 要与上面的 class 同名,然后在这里面实现所有的 静态属性 和 静态方法

  3. 定义的 class 与 object 必须在同一个文件内。

满足以上条件,就将该 object 对象 称为该 class 的 伴生对象;相对应,将该 class 称为该 object 对象 的 伴生类

例子

class Phone(var cpu:String) {
  def call(num:String):Unit = {
    println(s"用 $cpu 给 $num 打电话")
  }
}

object Phone {
  //定义静态属性
  var name:String = "iphone"
  // 定义静态方法
  def about():Unit = {
    println("关于信息。。。")
  }
}

object test{
  def main(args: Array[String]): Unit = {

    val phone:Phone = new Phone("A100")
    println("CPU是:"+phone.cpu) //通过对象访问成员变量
    phone.call("110") //通过对象调用成员方法

    //调用时,看起来类似java,通过类名访问静态变量。其实是调用object中的变量
    println( s"手机是:${Phone.name}" )
    //调用时,看起来类似java,通过类名访问静态方法。其实是调用object中的方法
    Phone.about()


  }
}

作用1

在 scala 中,class 中只能定义 实例属性 和 实例方法,object 中只能定义 静态属性 和 静态方法

伴生对象、伴生类的存在,看上去,实现类似 Java 中的功能:在同一个类里既有 实例属性 和 实例方法,又有 静态属性 和 静态方法

如下:

println("CPU是:"+phone.cpu)
phone.call("110")

//调用时,看起来类似java,通过类名访问静态变量。其实是调用object中的变量
println( s"手机是:${Phone.name}" )
//调用时,看起来类似java,通过类名访问静态方法。其实是调用object中的方法
Phone.about()

作用2

伴生类 和 伴生对象 中,可以通过 名字 访问 对方的 所有属性、调用对方的 所有方法,包含 private私有

  • 伴生类 中要访问 伴生对象 中的 属性 或 方法,可通过 伴生对象名 . 属性 访问 ,通过 伴生对象名 . 方法名() 来调用

  • 伴生对象 中要访问 伴生类 中的 属性 或 方法,必须要对 伴生类 实例化,通过 伴生类对象 . 属性 访问,通过 伴生类对象 . 方法名() 来调用


原文出处:/show_1IX2MgaI6UGh.html