类
简单类和无参方法
class Counter {
private var value = 0 //你必须初始化字段
def increment() {values += 1} //方法默认是公有的
def current() = value
}
调用:
val myCounter = new Counter //或new Counter()
myCounter.increment()
println(myCounter.current)
小记:当调用无参方法时候,后面的圆括号可以不写
带getter和setter的属性
使用var声明,会自动生成getter和setter方法。
只带getter的属性
使用val声明,只有只读属性,即只有getter,没有setter方法。
Bean属性
import scaal.reflect.BeanProperty
class Person {
@BeanProperty var name: String = _
}
会自动生成:
1.name: String
2.name_ = (newValue: String): Unit
3.getName(): String
4.setName(newValue: String): Unit
辅助构造器
1.辅助构造器的名称为:this。
2.每一个辅助构造器都必须以一个对先前已经定义的其他辅助构造器或主构造器的调用开始。
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
}
}
主构造器
主构造器的参数直接放置在类名之后。
主构造器会执行类定义中的所有语句。
class Person(name: String, age: Int) {
println("这个是主构造方法产生的语句!")
def description = name + " is " + age + "years old !"
}
嵌套类
Scala中,你几乎可以在任何语法结构中内嵌任何语法结构!
比如:
import scala.collection.mutable.ArrayBuffer
class NetWork {
class Member(val name: String) {
val contacts = new ArrayBuffer[Member]
}
private val members = new ArrayBuffer[Member]
def join(name: String) {
val m = new Member(name)
members += m
m
}
}
当然,也可以这样:
object Network {
class Member(val name: String) {
val contacts = new ArrayBuffer[Member]
}
}
class Network {
private val members = new ArrayBuffer[Network.Member]
}
当然,也可以这样:
class Network {
class Member(val name: String) {
val contacts = new ArrayBuffer[Network#Member]
}
}