Scala面向?qū)ο髲氐拙癝park源碼閱讀
不用寫public class中的public
class Person {
private var myName = "flink"
def name = this.myName
def name_=(newName:String){ //重載?
myName = newName
println("Hi " + this.myName)
}
}
class Person {
private var myName = "flink"
def name = this.myName
def update(newName : String){
myName = newName
println("Hi " + this.myName)
}
}
重要:private[this]
//對(duì)象私有,不能被其他對(duì)象訪問
class Person {
private var myName = "flink"
def name = this.myName
def update(newName : String){
myName = newName
println("Hi " + this.myName)
}
def talk(p:Person) = {
println("Hello "+ p.name)
}
}
scala> val p1 = new Person
p1: Person = Person@13cd7ea5
scala> val p2 = new Person
p2: Person = Person@c4c0b41
scala> p2.update("Spark")
Hi Spark
scala> p1.talk(p2)
Hello Spark
scala> p2.talk(p1)
Hello flink
class Person {
private[this] var Name = "flink"
def update(newName : String){
println("Hi ")
}
def talk(p:Person) = {
println("Hello "+ p.name)
}
}
<console>:14: error: value name is not a member of Person
println("Hello! " + p.name)
^
//不能被其他對(duì)象訪問。
//重載構(gòu)造器
//默認(rèn)構(gòu)造器在類定義內(nèi),任何非def的都將執(zhí)行
class Person {
var name = "flink"
var age = 10
def update(newName : String){
println("Hi ")
}
def this(name: String){
this()//必須調(diào)用一個(gè)其他構(gòu)造器
this.name = name
}
def this(name: String, age:Int){
this(name)//必須調(diào)用一個(gè)其他構(gòu)造器
this.age = age
}
}
//Scala 的內(nèi)部類的不同內(nèi)部類為不同類型
object
定義類后同時(shí)定義object存放靜態(tài)成員和方法,為伴生對(duì)象,它的構(gòu)造器不接受參數(shù),只在第一次調(diào)用執(zhí)行一次
object Person {
var salary = 0.0
println("Scala")
def getSalary = salary
}
apply是當(dāng)前類的對(duì)象的工廠方法
程序入口在object內(nèi)的main方法def main(argStrings:Array[String]) {}
抽象類
重寫父類要加override,重寫父類的抽象方法必須加override關(guān)鍵字
抽象屬性,不給值,需要覆蓋
trait?接口?
DAGScheduler 是一個(gè)至關(guān)重要的類
|