從java瞭解類的狀況下,瞭解Scala的類並不難。Scala類中的字段自動帶getter和setter方法,用@BeanProperty註解生成javaBean對象的getXXX與setXXX方法java
class Counter { // 初始化字段值value private var value = 0 // 方法默認是public的 def increment() { value +=1 } def current() = value } Scala中類沒必要聲明爲public,Scala源文件能夠包含多個類,這些類都是默認public的。 // 構造對象調用Counter val counter = new Counter() // 通常習慣對改值器使用(),對取值器不適用() counter.increment() println(counter.current)
public class Person { private int age; public int getAge() {return age} public void setAge(int age) {this.age =age} // 在java中使用set,get方法對屬性進行修改獲取是比較好的一種方式。Scala中每一個字段默認提供getter和setter方法 // get方法 def age = privateAge // set方法 def age_(newValue: Int): Unit = { if (newValue > privateAge) { privateAge = newValue } } // junit的測試 @Test def testCounter(): Unit = { val counter = new Counter() counter.increment() println(counter.current()) counter.age_(10) println(counter.age) // 類私有的自動沒法建立對象.屬性調用 } // Scala的字段加@BeanProperty import scala.reflect.BeanProperty class Person { @BeanProperty // 默認會生成get/set方法 var name:String =_ }
定義以this開頭的是輔助構造器 /** * 輔助構造器 * * @param username */ def this(username: String) { this() this.username = username } /** * 輔助構造器 * @param username * @param score */ def this(username: String, score: Int) { // 調用上一個構造器 this(name) this.score = score } // 3種方法構建對象 val p1 = new Person val p2 = new Person("Bob") val p3 = new Person("Bob",24) // 構建主構造器 class Person(val name:String="",val age:Int=10) { println("這是構造方法") def des = "name="+name+",age="+age } val pserson = new Person("haha",12) 將會執行主構造方法
和java相似,Scala中也有內部類,可是比java更豐富些,Scala中調用的方式是new OuterClass.innerClass而java中式outClass.new InnerClass()學習
class NetWork { class Member(val name: String) { val contacts = new ArrayBuffer[Member] } private val members = new ArrayBuffer[Member] def join(name: String) = { val m = new Member(name) members+=m m } } val beijing = new network val xian = new network val s1 = beijing.join("Bob") val s2 = beijing.join("Michael") // 同一種類型能夠同一個集合 s1.conttacts +=s2 val s3 = xian.join("Alice") // 不能夠將s3添加到s1中,由於不是同一個Network對象