Scala_(2)_面向对象

来源:互联网 发布:教学绘图软件 编辑:程序博客网 时间:2024/05/07 19:22
1.类
class HiScala{
private var name="Spark"
def sayName(){...}
def getName = name
}
创建实例:new HiScala

暴露get 方法的两种方式:
class HiScala{
private var myName = "flink"
def name = this.myName
def name_=(newName : String){
myName = newName
}
}
class HiScala{
private var myName = "flink"
def name = this.myName
def update(newName : String){
myName = newName
}
}
private[this] 类私有的基础上,类中的属性、方法及其对象的私有
class Person{
private[this] var name = "Flink"
def update(newName:String){
...
}
def talk(p : Person){
p.name // 此时不能访问
}
}

构造器
class Person{
var name = "flink"
var age = 0
def xxx(){
...
}
}
def this(name : String){
this()
this.name = name
}

def this(name:String,age :Int){
this(name)
this.age = age
}
注:与类名在一起定义的就是默认构造器,如SparkContext:
class SparkContext(config : SparkConf)
只要不是定义在方法中,在创建构造器的时候都会执行,常用于成员的初始化
内部类
scala中的内部类与Java中的内部类不同,在Scala中,同一个内部类的不同实例属于不同的类型

2.Object
类的伴生对象,包含静态成员和静态方法
只在第一次调用时执行
object Person{
print("scala")
var salary = 0.0
def getSalary = salary
}
第一次运行Person.getSalary的结果:
scala
0.0
第二次运行Person.getSalary的结果:
0.0
注:伴生类和伴生对象必须定义在同一个文件中

Apply方法
当前类对象的工厂方法,在构造类时,一般是定义在类的伴生对象的Apply方法中
main方法在伴生对象中,因为在伴生对象中所有的成员都是静态的

3.抽象类
abstract class
子类的继承:extends
如果需要复写父类的方法,需要在方法定义前加上override,如:
override def xxx()
抽象的属性,在子类中必须复写这个属性,最佳实践:加上override关键字
4.Trait
类似接口
可以定义抽象方法,每一具体的实现
类可以使用extends继承trait,多继承时需要使用with,如:
abstract claa RDD extends Serializable with Logging

源码:RDD与SparkContext
原创粉丝点击