1、函数定义
class Person{
//没有private的var会自动生成setter和getter方法,val只有getter方法,
//private定义的变量则不生成getter和setter方法
var name = "Spark"
def sayName = { println(this.name) }
def getName = name
}
val p = new Person
println(p.name)// 调用的是内部自动生成的getter方法,结果:Spark
p.name = "Scala"//调用的是内部自动生成的setter方法
println(p.name)//结果:Scala
2、自定义Setter方法
class Person{
private var myName = "Spark"
defname_=(newName: String){ //name_=(newName: String)等号两边不能有空格
this.myName = newName
}
def name = this.myName //getter和setter名称要相同(蓝色部分)
}
val p = new Person
p.name_=("Scala")//调用自定义setter方法,或者直接通过p.name = "Scala"赋值,结果一样
println(p.name)//结果:Scala
3、构造器
class Person { println("Big Data") //所有不在方法内的语句会在默认构造器初始化调用 var name = "Spark" var age = 10 def this(myName: String) { this()//第一条语句必须为默认构造函数 this.name = myName } def this(myName: String, myAge: Int) { this(myName) this.age = myAge } }
val p = new Person("Scala",15) println(p.age)
4.Object
// object通常放置静态对象,该Person是class Person的伴生对象,且main方法放在object里面
object Person{
println("scala")//第一次调用显示,以后就不会执行了
var scalay = 0.0
def getSalary = scalay
}
5.抽象类与继承(final类不能被继承)
abstract RDD{
def compute()
}
class JdbcRDD extends RDD{
override def compute(){
println("hello")
}
}
6.scala不支持多继承,但支持混入(with特质)
trait Logging{}//trait相当于接口,可以用extends或with
class JdbcRDD extends RDD with Logging{....}