Scala_Object关键字

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

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

郝少

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值