class、object、case class、case object区别!

首先,了解:

  1. class 类似Java中的class;
  2. object Scala不能定义静态成员,用定义单例对象代之;
  3. case class被称为样例类,是一种特殊的类,常被用于模式匹配。

一、class 和 object 关系:

  1. 单例对象不能带参数,类可以;
  2. 对象可以和类名一样时,object被称为伴生对象,class被称为伴生类;
  3. 类和伴生对象可以相互访问其私有属性,但是它们必须在一个源文件当中;
  4. 类只会被编译,不会被执行。要执行,必须在Object中。

二、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对象;apply方法这个方法的话,暂时没有理解它到底具体是干嘛的。。。有点绕。但是它大概是像java的构造函数,接受构造参数变成一个对象。

  3. 伴生对象中同样会帮我们实现unapply方法,从而可以将case class应用于模式匹配;unapply方法主要用于模式匹配中,接受一个对象,从对象中提取出相应的值。

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

  5. 除此之此,case class与其它普通的scala类没有区别

总结为:这一块还是有点懵。明天继续奋斗。

猜你喜欢

转载自blog.csdn.net/qq_42658739/article/details/106724994
今日推荐