创建类:
class Hiscala{
private var name="Spark" //私有化无法直接访问
def sayName() {println(name)}
def getName=name
}
val scal=new Hiscala
scal.getName()
scal.getName //没有传参数可以去掉括号
class Person{
private var myName="Flink"
def name=this.myName //类似get
def name_=(newName : String){ //类似重写 name_= set方法
myName=newName
println("Hi:" +myName)
}
}
class Person{
private var myName="Flink"
def name=this.myName
def update(newName : String){ //直接使用方法
myName=newName
println("Hi:" +myName)
}
}
val rock=new Person
rock.update("Hadoop")
class Person{
private var myName="Flink"
def name=this.myName
def update(newName : String){
myName=newName
println("Hi:" +myName)
}
def talk(p:Person)={
println("Hello"+p.name)
}
}
val p1=new Person
val p2=new Person
p2.update("Spark")
p1.talk(p2)
private[this] 不想被其他的变量使用,内中的方法也无法访问private[this]中是成员
class Person{
private[this] var name="Flink"
def update(newName : String){
println("Hi:")
}
def talk(p:Person)={
println("Hello"+p.name) //name 不是talk的实例成员 会报错
}
}
类的构造器:
class Person{
var name="Flink"
var age=10
def update(newName : String){
println("Hi:")
}
def talk(p:Person)={
println("Hello"+p.name)
}
def this(name:String){
this() //所有重载构造器首先要调用默认构造器或其他重载的构造器
this.name=name
}
def this(name:String,age:Int){
this(name) //所有重载构造器首先要调用默认构造器或其他重载的构造器
this.age=age
}
}
val p1=new Person("Spark",5)
伴生对象object
一般 定义类之后定义一个同名的object,存放静态成员、方法 必须在同个文件
object只会在第一次调用时执行
object Person{
println("Scala") //object里面有默认的构造器 只会在第一次调用时执行
var salary=0.0
def getSalary=salary
}
Person.getSalary //Scala 0.0
Person.getSalary //0.0
伴生对象中有apply方法 工厂方法模式
val array=Array(1,2,3) 就是调用下面的方法
val array=Array.apply(1,2,3) //会调用伴生对象的方法,基本不用new
override 关键字 覆写父类方法(抽象方法必须使用,非抽象也建议使用)