Scala中的類學習

Scala中的類學習

從java瞭解類的狀況下,瞭解Scala的類並不難。Scala類中的字段自動帶getter和setter方法,用@BeanProperty註解生成javaBean對象的getXXX與setXXX方法java

  • 構造Scala的類
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)
  • 構造類setXXX與getXXX
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對象
相關文章
相關標籤/搜索