伴生对象 和 伴生类
定义一个
class并在这里面实现所有的 实例属性 和 实例方法添加一个
object,这个object要与上面的class同名,然后在这里面实现所有的 静态属性 和 静态方法定义的 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私有
伴生类中要访问伴生对象中的 属性 或 方法,可通过伴生对象名 . 属性访问 ,通过伴生对象名 . 方法名()来调用伴生对象中要访问伴生类中的 属性 或 方法,必须要对 伴生类 实例化,通过伴生类对象 . 属性访问,通过伴生类对象 . 方法名()来调用