7.1简单类和无参方法
通过class进行类的定义。
注:在Scala中,类并不声明为Public,
一个Scala源文件可以包含多个类。所有这些类都具有公有可见性。
调用无参方法时,可以加(),也可以不加;
如果方法定义中不带括号,那么调用时就不能带括号。
7.2 Getter、Setter 方法
对于scala类中的每一个属性,编译后,会有一个私有的字段和相应的getter、setter方法生成,
比如:
如果属性为age,
那么getter方法名叫age,setter方法名为age_=
你也可以重定义getter、setter方法:
注意:
1、如果字段是私有的,则getter和setter 方法也是私有的。
2、如果字段是val,则只有getter 方法被生成。
3、如果你不需要任何 getter或setter,可以将字段声明为private[this].
7.3对象私有字段
private[this]定义对象私有的字段,不生成get、set方法。
7.4Bean属性
JavaBeans规范定义了Java的属性是像getXXX()和setXXX()的方法。许多Java工具都依赖这个命名习惯。
为了Java的互操作性。将Scala字段加@BeanProperty时,这样的方法会自动生成。
Person将会生成四个方法:
1、name:String
2、name_=(new Value:String):Unit
3、getName():String
4、setName(new Value:String):Unit
7.5构造器
Scala的类构造器分为主构造器和辅助构造器。
1)主构造器的参数直接放置在类名之后:
2)主构造器会执行类定义中的所有语句:
3)通过private设置主构造器的私有属性:
4)如果参数至少被一个方法使用,该参数将自动升格为字段,否则,该参数将不被保存为字段:
5)辅助构造器名称为this,通过不同参数进行区分,每一个辅助构造器都必须以主构造器或者已经定义的辅助构造器的调用开始:
7.6嵌套类
在Scala中,你几乎可以在任何语法结构中嵌套任何语法结构,在函数中定义函数,在类中定义类。
Java中的内部类从属于外部类。Scala中每一个实例都有一个内部类,内部类从属于实例。
注意:在内嵌类中,你可以通过外部类.this的方式来访问外部类的this引用。还可以对其进行命名访问。
import org.scalatest.FunSuite
import scala.beans.BeanProperty
// class定义类,和java类似,不用声明public
//1)主构造器的参数直接放置在类名之后
class Chapter06Test(val name11: String = "", val age11: Int = 1) extends FunSuite {
var age = 0
private var value = 0
//private[this]定义对象私有的字段,不生成get、set方法。
private[this] var val123 = 0
//生成与java类似的set/get方法
@BeanProperty var name: String = _
def increment(): Unit = {
value += 1
}
def current() = value
test("core01") {
//类的定义如上所示
}
test("core02") {
//setter方法
// 对于scala类中的每一个属性,编译后,会有一个私有的字段和相应的getter、setter方法生成,
// 比如: 如果属性为age,
// 那么getter方法名叫age,setter方法名为age_=
val f = new Chapter16Test
//setter方法
// f.age=21
//getter方法
// println(f.age)
}
test("core03") {
// private[this]定义对象私有的字段,不生成get、set方法。
}
test("core04") {
}
test("core05") {
// 1)主构造器的参数直接放置在类名之后
}
test("core06") {
// 在Scala中,你几乎可以在任何语法结构中嵌套任何语法结构
}
//定义在一个类的内部称为嵌套类
class Member(val name: String) {
val contacts = Array(1, 2, 3)
}
}