Scala中class、object、case class、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 = { val iteblog = new Iteblog("iteblog_hadoop") val iteblog2 = Iteblog("iteblog_hadoop") println(iteblog == iteblog2) println(iteblog.hashCode) println(iteblog2.hashCode) } }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM