Scala中class、object、case class、case object的区别

本文介绍了Scala中class与object的关系、case class的特点及其与普通class的区别,还详细解释了case object的应用场景,并通过实例展示了case class如何支持模式匹配。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

导读

Scala中class类似Java中的class;

object Scala不能定义静态成员,用定义单例对象代之;

case class被称为样例类,是一种特殊的类,常被用于模式匹配。

1 class和object的关系

(1)单例对象不能带参数,类可以

(2)对象和类名一样时,object被称为伴生对象,class被称为伴生类

(3)类和伴生对象可以相互访问其私有属性,但是它们必须在一个源文件中

(4)类只会被编译,不会被执行;要执行,必须在object中

2 case class与class的区别

(1)case class初始化的时候可以不用new,也可以加上,但是class必须加new

(2)默认实现了equals、hashCode方法

(3)默认是可以序列化的,实现了Serializalbe

(4)自动从scala.Product中继承一些函数

(5)case class构造函数参数是public的,可以直接访问

(6)case class默认情况下不能修改属性值

(7)case class最重要的功能,支持模式配置,这也是定义case class的重要原因

3 case class和case object的区别

类中有参和无参,当类有参数的时候,用case class,当类没有参数的时候用case object

4 当一个类被声明为case class的时候,Scala会自动做下面几件事情

(1)构造器中的参数如果不被声明为var的话,它默认是val类型的,但一般不推荐在构造器中的参数声明为var

(2)自动创建伴生对象,同时在里面实现子apply方法,使得在使用的时候可以不直接显示地new对象

(3)伴生对象中同样会实现unapply方法,从而可以将case class应用于模式匹配

(4)实现自己的toString、hashCode、copy、equals方法

除此之外,cass class与其它普通的scala类没有区别

case class CaseDemo(name:String)
object demo {
  def main(args: Array[String]): Unit = {
    val caseDemo1 = new CaseDemo("case")
    val caseDemo2 = CaseDemo("case")
    println(caseDemo1 == caseDemo2) //true
    println(caseDemo1.hashCode()) //612386822
    println(caseDemo2.hashCode()) //612386822
  }
}

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值