Scala_Object关键字

懵懂的女人 提交于 2019-12-31 13:39:51

1、为什么要使用Object

通俗解释:在Scala中没有静态方法和静态属性,故使用Object修饰的类名(对象)里面的方法和属性都相当于static修饰的。

专业解释:Scala类中没有java那样的静态成员。Scala采用单例对象来实现与java静态成员同样的功能。单例对象的定义与类定义类似,只是用object关键字替换了class关键字。

package com.scala.test.myclass

object Car {
  val price=120000
  val color="red"
  
  def run(): Unit ={
    println("汽车。。。。")
  }
}
package com.scala.test.myclass

object Main {
  def main(args: Array[String]): Unit = {
    //直接通过类名调用
    Car.run();
    println(Car.color)
  }
}
汽车。。。。
red

2、伴生对象和伴生类

当单例对象与某个类共享同一个名称时,他被称作是这个类的伴生对象:companion object。你必须在同一个源文件里定义类和它的伴生对象。类被称为是这个单例对象的伴生类:companion class。类和它的伴生对象可以互相访问其私有成员。

package com.scala.test.myclass

class Person(name:String,age:Int) {
  private def getInfo(): Unit ={
    println("name: "+name+" age:"+age+" weight:"+Person.weight)
  }

}

object Person{
  private val weight="63kg"

  def run(): Unit ={
    val person=new Person("LiJun",19)
    person.getInfo()
  }

}
package com.scala.test.myclass

object Main {
  def main(args: Array[String]): Unit = {
    //直接通过类名调用
    Person.run();
  }
}
name: LiJun age:19 weight:63kg

3、apply方法

(1)通常我们会在类的伴生对象中定义apply方法,当遇到类名(参数1....参数n)时,apply方法会被调用;

(2)apply的作用主要是创建类的对象时,不需要通过new这个关键字。

package com.scala.test.myclass

class Person(name:String,age:Int) {
   def getInfo(): Unit ={
    println("name: "+name+" age:"+age+" weight:"+Person.weight)
  }

}

object Person{
  private val weight="63kg"

  def apply(name: String, age: Int): Person = new Person(name, age)

}
package com.scala.test.myclass

object Main {
  def main(args: Array[String]): Unit = {
    //调用主构造器
    val p1=new Person("LiSi",20)
    //调用apply方法
    val p2=Person("LiSi",20);

    p1.getInfo()
    p2.getInfo()

  }

}
name: LiSi age:20 weight:63kg
name: LiSi age:20 weight:63kg

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!