天天看點

case class、class 、object 、case object

/* 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 = {

}