第2集:Scala面向对象彻底精通及Spark源码阅读

 

定义类
class HiScala {
private var name = "Spark"
def sayName(){println(name)}
def getName=name
}

实例化类
scala> val scal = new HiScala
scal: HiScala = HiScala@769d96e0

调用类的方法
scala> scal.sayName()
Spark

scala> scal.getName
res6: String = Spark


class HiScala {
var name = "Scala"
def sayName(){println(name)}
def getName=name
}

访问public的getter,setter
scala> println(scal.name)
Scala

scala> scal.name
res9: String = Scala

重写默认的getter和setter 注意_=连在一起的
class Person {
private var myName = "Flink"
def name = this.myName
def name_=(newName : String){
myName=newName
println("Hi: " + myName)
}
}

scala> rocky.name
res10: String = Flink

scala> rocky.name="Spark"
Hi: Spark
rocky.name: String = Spark


private[this]修饰时代表为类私有,对象私有,只能被类的对象使用,不能被当前类的方法使用
class Person {
private var myName = "Flink"
def name = this.myName
def name_=(newName : String){
myName=newName
println("Hi: " + myName)
}
def talk(p: Person) = {
println("Hello "+p.name)
}
}

val p1 = new Person
val p2 = new Person
p2.name="Spark"

scala> p1.talk(p2)
Hello Spark

但是如下修改后,name不是Person的成员,只能是这个对象访问
class Person {
private[this] var name = "Flink"
def talk(p: Person) = {
println("Hello "+p.name)
}
}

private[package-name] ...
即package-name包中的所有类和对象都可以访问private后面的成员。

构造函数
class Person {
var name = "Flink"
var age = 18
def this(name:String){
this()
this.name=name
}
def this(name:String,age:Int){
this(name)
this.age=age
}
}


与类名放在一起的是默认构造器,如class SparkContext(config: SparkConf)

class Person {
println("Big Data") //默认构造器会把所有没有放在方法的代码块进行执行
var name = "Flink"
var age = 18
def this(name:String){
this()
this.name=name
}
def this(name:String,age:Int){
this(name)
this.age=age
}
}

scala> val p = new Person("Spark",20)
Big Data
p: Person = Person@10dafee8


object伴生对象,必须在同一个文件中

class Person {
var name = "Flink"
var age = 18
def this(name:String){
this()
this.name=name
}
def this(name:String,age:Int){
this(name)
this.age=age
}
}

//用于存放常量和静态方法
object Person {
println("Scala") //只调用一次
var salary = 0.0
def getSalary = salary
}


scala> Person.getSalary
Scala
res16: Double = 0.0

scala> Person.getSalary
res17: Double = 0.0

抽象类abstract class
接口trait

作业:自己分析SparkContext和RDD这两个类

posted @ 2016-01-10 21:24  Jack葛  阅读(236)  评论(0编辑  收藏  举报