class、object、case class、case object区别

class 类似Java中的class;

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

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

 

一、class 和 object 关系:

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

2.对象可以和类名一样时,object被称为伴生对象,class被称为伴生类;

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

4.类只会被编译,不会被执行。要执行,必须在Object中

如下图Object 是静态类,可以直接用 类名.类方法  调用静态类的方法

object Demo{
    def add(x:Int, y:Int): Int ={
      x + y
    }
  }

  def main(args: Array[String]): Unit = {
    println(Demo.add(1, 2))
  }

 

二、case class 与 class 区别:

1.初始化的时候可以不用new,也可以加上,但是普通类必须加new;

2.默认实现了equals、hashCode方法;

3.默认是可以序列化的,实现了Serializable;

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

5.case class 构造函数参数是public的,我们可以直接访问;

6.case class默认情况下不能修改属性值;

7.case class最重要的功能,支持模式匹配,这也是定义case class的重要原因。

 

三、case class 和 case object 区别:

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

 

四、当一个类被声名为case class的时候,scala会帮助我们做下面几件事情:

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

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

3.伴生对象中同样会帮我们实现unapply方法,从而可以将case class应用于模式匹配,关于unapply方法我们在后面的“提取器”那一节会重点讲解

4.实现自己的toString、hashCode、copy、equals方法 除此之此,case class与其它普通的scala类没有区别

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值