Scala面向对象彻底精通及Spark源码阅读
不用写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 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)
^
//不能被其他对象访问。
//重载构造器
//默认构造器在类定义内,任何非def的都将执行
class Person {
var name = "flink"
var age = 10
def update(newName : String){
println("Hi ")
}
def this(name: String){
this()//必须调用一个其他构造器
this.name = name
}
def this(name: String, age:Int){
this(name)//必须调用一个其他构造器
this.age = age
}
}
//Scala 的内部类的不同内部类为不同类型
object
定义类后同时定义object存放静态成员和方法,为伴生对象,它的构造器不接受参数,只在第一次调用执行一次
object Person {
var salary = 0.0
println("Scala")
def getSalary = salary
}
apply是当前类的对象的工厂方法
程序入口在object内的main方法def main(argStrings:Array[String]) {}
抽象类
重写父类要加override,重写父类的抽象方法必须加override关键字
抽象属性,不给值,需要覆盖
trait?接口?
DAGScheduler 是一个至关重要的类