Scala学习笔记--Constructor

Scala的类和java中的类很相似,但是scala中的类表达更精炼
class Counter{
//在scala中类中定义的实例默认是public
//必须初始化
private var value = 0
//方法默认是公有的
def increment(){value += 1}
}
在scala中,getter和setter分别叫做:age和age_=。
//var定义的,privateAge私有字段既有setter方法又有getter方法
private var privateAge = 0
def age = privateAge
def age_=(newValue:Int){
if(newValue > privateAge) privateAge = newValue
}
//如果换成val定义,则只有getter方法
private var privateAge = 0
…………
//则会报错
if(newValue > privateAge) privateAge = newValue

calss Counter {
    private var value = 0
    def increment(){ value += 1}
    //可以访问另一个对象的私有字段
    //因为other也同样是Counter对象
    def isLess(other:Counter) = value < other.value
} 
对象私有化: //对于对象私有字段,Scala根本不会生成getter或setter方法
private[this] var value = 0 //类似某个对象.value这样的访问将不被允许
这样一来Counter类的方法只能访问到当前对象的value字段,而不能访问同样是Counter类型的其他对象的该字段

Constructor(构造器)
auxiliary constructor(辅助构造器)
1>辅助构造器的名称为:this
2>每一个辅助构造器都必须以一个先前已定义的其他辅助构造器或主构造器的调用开始
3>主构造器中的属性在类创建的时候就会被执行,而方法则是被调用的时候再回执行
例如:
class Person{
private var name = “”
private var age = 0
//辅助构造器
def this(name:String){
//调用主构造器,一定要
this()
this.name = name
}
def this(name:String,age:Int){
//调用前一个辅助构造器
this(name)
this.age = age
}
}

primary constructor(主构造器)
例如:
//主构造器后面直接跟类名之后
class Person(val name: String, val age: Int){
println(“Just constructed another person”)
def decription = name + “is” + age + “year old”
}
//如果不带val或var,则下面的name和age,是不可变的字段,
//而这个两个字段都是对象私有的相当于private[this]val
class Person(name:String,age:Int){
def description = name + “is” + age + “years old”
}

嵌套类
内部类隶属于外部类的对象
因此:内部类可以通过外部类创建一个实例对象然后就可以引用访问了。
例如:
object OOPInScala{
//outer=>给外部类指定一个名称 outer就指向Outer.this
class Outer(val name:String){outer =>
class Inner(val name:String){
//b.name指的是内部类的name
//out.name指的是外部类的name
def foo(b:Inner) = println(“Outer: ” + outer.name + “Inner: ” + b.name)
}
}
def main(args:Array[String]){
val outer1 = new Outer(“Spark”)
val outer2 = new Outer(“Hadoop”)
val inner1 = new outer1.Inner(“Scala”)
val inner2 = new outer2.Inner(“Java”)
inner1.foo(inner1)
inner2.foo(inner2)
}
}

你可能感兴趣的:(scala)