一、 定義一個簡單的類java
二、getter與setter函數
三、自定義getter與setter方法this
四、僅暴露field的getter方法spa
五、private[this]的使用scala
六、Java風格的getter和setter方法3d
七、輔助constructor對象
八、主constructorblog
九、內部類get
定義類和建立類的對象,並調用其方法it
定義不帶private的var field,scala自動生成getter和setter方法。
使用private修飾,則生成的getter和setter也是private的。
定義val field 則只會生成getter方法。
不但願生成setter和getter方法,則將field聲明爲private[this]。
調用getter和setter方法,分別叫作name和name_=。
若是但願可以本身對getter和setter方法進行控制,則能夠自定義getter和setter方法,自定義setter方法的時候必定要注意scala的語法限制,簽名、=、參數之間不能有空格。
若是但願可以僅僅暴露一個getter方法,而且還能經過某些方法更改field的值,那麼須要綜合使用private以及自定義getter方法。此時field是private的,對外界沒有暴露,本身能夠實現修改field值的方法,能夠覆蓋getter方法。
在類的方法中,可直接訪問類的其餘對象的private field,有些狀況下,不但願field被其餘對象訪問到,那麼可使用private[this],意味着對象私有的field,只有本對象內能夠訪問到。
Scala的getter和setter方法的命名與java是不一樣的,是field和field_=的方式。若是要讓scala自動生成java風格的getter和setter方法,只要給field添加@BeanProperty註解便可。此時會生成4個方法,name:String、name_=(newValue:String):Unit、getName():String、setName(newValue:String):Unit。
Scala中,能夠給類定義多個輔助constructor,相似於java的構造函數重載。輔助constructor之間能夠相互調用,並且必須第一行調用主constructor。
Scala中,主constructor是與類名放在一塊兒的,與java不一樣。在類中,沒有定義在任何方法或者代碼塊之中的代碼,就是主constructor的代碼,這點沒java那麼清晰。
主contructor中還能夠經過使用默認參數,給參數設置默認的值。
若是主constructor傳入的參數什麼修飾都沒有,好比name:String,那麼類內部的方法是用到了,則會聲明爲private[this] name;不然沒有該field,就只能被constructor代碼使用而已。
Scala中,能夠在類中定義內部類,與java不一樣,每一個外部類的對象的內部類,都是不一樣的類。