不用寫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]
//對象私有,不能被其他對象訪問
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 Personp1: Person = Person@13cd7ea5scala> val p2 = new Personp2: Person = Person@c4c0b41scala> p2.update("Spark")Hi Sparkscala> p1.talk(p2)Hello Sparkscala> 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) ^//不能被其他對象訪問。
//重載構(gòu)造器
//默認構(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òu)造器 this.name = name } def this(name: String, age:Int){ this(name)//必須調(diào)用一個其他構(gòu)造器 this.age = age }}//Scala 的內(nèi)部類的不同內(nèi)部類為不同類型
object
定義類后同時定義object存放靜態(tài)成員和方法,為伴生對象,它的構(gòu)造器不接受參數(shù),只在第一次調(diào)用執(zhí)行一次
object Person {var salary = 0.0println("Scala")def getSalary = salary}
apply是當(dāng)前類的對象的工廠方法
程序入口在object內(nèi)的main方法def main(argStrings:Array[String]) {}
抽象類
重寫父類要加override,重寫父類的抽象方法必須加override關(guān)鍵字
抽象屬性,不給值,需要覆蓋
trait?接口?
DAGScheduler 是一個至關(guān)重要的類