1. 程式人生 > >Scala光速入門之面向物件(二)

Scala光速入門之面向物件(二)

1、函式定義

class Person{

//沒有private的var會自動生成setter和getter方法,val只有getter方法,

//private定義的變數則不生成getter和setter方法

var name = "Spark"

        def sayName = { println(this.name) }

def getName = name

}

val p = new Person

println(p.name)// 呼叫的是內部自動生成的getter方法,結果:Spark

p.name = "Scala"//呼叫的是內部自動生成的setter方法

println(p.name

)//結果:Scala

2、自定義Setter方法

class Person{

private var myName = "Spark"

defname_=(newName: String){  //name_=(newName: String)等號兩邊不能有空格

this.myName = newName

}

        def name = this.myName  //getter和setter名稱要相同(藍色部分)

}

val p = new Person

        p.name_=("Scala")//呼叫自定義setter方法,或者直接通過p.name = "Scala"賦值,結果一樣

println(p.name)//結果:Scala

3、構造器

classPerson {
  println("Big Data")
  //所有不在方法內的語句會在預設構造器初始化呼叫var name = "Spark"var age = 10def this(myName: String) {
    this()//第一條語句必須為預設建構函式this.name = myName
  }

  def this(myName: String, myAge: Int) {
    this(myName)
    this.age = myAge
  }
}
val p = new Person
("Scala",15) println(p.age)

4.Object

// object通常放置靜態物件,該Person是class Person的伴生物件,且main方法放在object裡面

object Person{

println("scala")//第一次呼叫顯示,以後就不會執行了

var scalay = 0.0

def getSalary = scalay

}

5.抽象類與繼承(final類不能被繼承)

abstract RDD{

def compute()

}

class JdbcRDD extends RDD{

override def compute(){

println("hello")

}

}

6.scala不支援多繼承,但支援混入(with特質)

trait Logging{}//trait相當於介面,可以用extends或with

class JdbcRDD extends RDD with Logging{....}