Scala 中class、object、case class、case object 区别
< 返回列表时间: 2020-07-03来源:OSCHINA
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 区别: 类中有参和无参,当类有参数的时候,用 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 类没有区别
233
热门排行