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

摘要:
/**类、对象、case类和case对象之间的区别**类类似于Java*中的类。ObjectScala无法定义静态成员。相反,定义单例对象*Caseclass,称为sampleclass,是一个特殊的类,通常用于模式匹配**3、case类和case对象之间的区别:*1。类中有参数,但没有参数。当类具有参数时,使用casecalass。当类没有参数时,使用caseobject。
/** class、object、case class、case object区别
  *
  * class 类似Java中的class;
  * object Scala不能定义静态成员,用定义单例对象代之;
  * 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对象
  * 3.伴生对象中同样会帮我们实现unapply方法,从而可以将case class应用于模式匹配,关于unapply方法我们在后面的“提取器”那一节会重点讲解
  * 4.实现自己的toString、hashCode、copy、equals方法
  * 除此之此,case class与其它普通的scala类没有区别
  */

case class Iteblog(name:String)

object TestScala {

  def main(args: Array[String]): Unit = {

    val iteblog = new Iteblog("iteblog_hadoop")

    val iteblog2 = Iteblog("iteblog_hadoop")

    println(iteblog == iteblog2)

    println(iteblog.hashCode)

    println(iteblog2.hashCode)
  }

}

免责声明:文章转载自《Scala中class、object、case class、case object区别》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇小程序Page里的函数比app.js先执行的解决办法2.swing的事件下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

cglib动态代理

通过前面介绍的文章可知,JDK的动态代理用起来非常简单,但动态代理中使用动态代理的对象必须实现一个或多个接口。如果一个类没有实现任何接口,只是一个纯粹的类,如果要实现对它的代理,那该该怎么办?为例解决这个问题,因此就引入了cglib动态代理。 为了保证关于代理的这几篇文章连续性,本文先占个坑,只简单介绍如何使用cglib,以后会修改并深入研究下原理。 使...

ASP.NET 全局变量和页面间传值方法

http://www.cnblogs.com/dgjack/archive/2011/05/28/2060913.html 1. 使用QueryString变量 QueryString是一种非常简单的传值方式,他可以将传送的值显示在浏览器的地址栏中。 如果是传递一个或多个安全性要求不高或是结构简单的数值时,可以使用这个方法。但是对于传递数组或对象的话,就不...

Javassist操作方法总结

CSDN参考Javassist tutorial 1、读取和输出字节码 ClassPool pool =ClassPool.getDefault(); //会从classpath中查询该类 CtClass cc = pool.get("test.Rectangle"); //设置.Rectangle的父类 cc.setSuperclass(pool.g...

Scala日期处理

计算时间间隔  val d = new java.text.SimpleDateFormat("yyyyMMdd HH:mm:ss").format(new java.util.Date()) val dateFormat = new java.text.SimpleDateFormat("yyyyMMdd HH:mm:ss")...

Scala学习3——注释和变量类型

1.注释 Scala注释和java完全一致 // 单行 /* */ 多行 /** */ 文档,方法或者类前面,便于scaladoc生成文档。 //单行注释 /* 多行注释 */ /* * 文档注释 * * * */ 2.代码规范 使用tab操作实现缩进,默认整体向右移动;shift+tab整体左移 使用...

Scala基础之集合(数组)

集合介绍 Scala的集合有三大类:序列Seq、集Set、映射Map,所有的集合都扩展自Iterable特质。对于几乎所有的集合类,Scala都同时提供了可变和不可变的版本。 集合可变,不可变的区别 Scala默认提供的集合都是不可变。 不可变:增删改 都会返回有个新数组 可变:可增删改  可变: scala.collection.mutable ha...