scala教程:object伴生对象 和 伴生类 作者:马育民 • 2021-12-07 20:28 • 阅读:10189 # 伴生对象 和 伴生类 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`**私有** - `伴生类` 中要访问 `伴生对象` 中的 **属性** 或 **方法**,可通过 `伴生对象名 . 属性` 访问 ,通过 `伴生对象名 . 方法名()` 来调用 - `伴生对象` 中要访问 `伴生类` 中的 **属性** 或 **方法**,必须要对 **伴生类 实例化**,通过 `伴生类对象 . 属性` 访问,通过 `伴生类对象 . 方法名()` 来调用 原文出处:http://malaoshi.top/show_1IX2MgaI6UGh.html