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
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{....}