scala学习笔记-类
2017-10-23 14:36
197 查看
1. 简单类和无参方法
scala类最简单的形式与Java类似:
class Counter{
private var value=0 //必须初始化字段
def increment(){ value+=1} //方法默认是公有的
def current() =value
}
在scala中,类并不声明为public。scala源文件可以包含多个类,所有类都具有公有可见性
使用该类需要做的就是构造对象并按照通常的方式来调用方法:
val myCounter =new Counter //或者 new Counter()
myCounter.increment()
println(myCounter.current)
调用无参方法时,可以写上圆括号,也可以不写。一般对于改值器方法(即改变对象状态的方法)使用(),对于取值器方法(不会改变对象状态的方法)去掉()
2. 带getter和setter的属性
scala对每个字段都提供getter和setter方法。例如:
class Person{
val age=0
}
scala生成面向JVM的类,其中有一个私有的age字段以及相应的getter和setter方法。这两个方法是公有的,因为我们没有将age声明为private。(对私有字段而言,getter和setter方法也是私有的。)
在scala中,getter和setter分别叫做age 和 age_=。 例如:
println(fred.age) //将调用方法 fred.age()
fred.age = 21
也可以重新定义getter和setter方法。例如:
class Person{
private var privateAge=0
def age=privateAge
def age_=(newValue: Int) {
if(newValue>privateAge) privateAge = newValue
}
}
如果字段是私有的,则getter 和setter 方法也是私有的
如果字段是val,则只有getter方法被生成
如果你不需要任何getter或setter,可以将字段声明为private[this]
3. 只带getter的属性
如果属性的值在对象构建完成后就不再改变,则可以使用val 字段
scala会生成一个私有的final字段和一个getter方法,但没有setter
实现属性的四中方法:
var foo : Scala 自动合成一个getter 和setter
val foo : Scala 自动合成一个getter
由你来定义foo 和 foo_=方法
由你来定义 foo 方法
4. 对象私有字段
scala中,方法可以访问该类的所有对象的私有字段。例如:
class Counter{
private var value =0
def increment() { value +=1 }
def isLess ( other :Counter) =value <other.value
}
之所以访问other.value 是合法的,是因为other 也同样是 Counter 对象
scala 允许定义更加严格的访问限制,通过private[this]这个修饰符来实现对象私有
private [this] var value =0 //类似某个对象 . value这样的访问将不被允许
对于类私有的字段,scala 生成私有的getter 和setter 方法。但是对于 对象私有的字段, scala根本不会生成 getter 或者 setter 方法
5. Bean 属性
当你将scala字段标注为 @BeanProperty时,这样的方法会自动生成。例如:
import scala.reflect.BeanProperty
class Person{
@BeanProperty var name:String=_
}
将会生成四个方法:
1) name:String
2) name_=(newValue:String):Unit
3) getName():String
4) setName(newValue:String):Unit
6. 辅助构造器
scala可以有任意多个构造器,一个主构造器和任意多个辅助构造器
辅助构造器的名称为this;每个辅助构造器必须以一个对先前已定义的其他辅助构造器或主构造器的调用开始
7. 主构造器
在scala中,每个类都有主构造器。主构造器并不以this方法定义,而是与类定义交织在一起
1) 主构造器的参数直接放置在类名之后
calss Person( val name: String, val age : Int) {
//(....) 中的内容就是主构造器的参数
...}
2) 主构造器会执行类定义中的所有语句。例如:
class Person( val name:String, val age : Int) {
println(" Just anoter person")
def desciption = name + " is "+ age + "years old"
}
println 语句是主构造器的一部分。每当有对象被构造出来时,上述代码就会被执行。
8. 嵌套类
scala中可以在函数中定义函数,在类中定义类
scala类最简单的形式与Java类似:
class Counter{
private var value=0 //必须初始化字段
def increment(){ value+=1} //方法默认是公有的
def current() =value
}
在scala中,类并不声明为public。scala源文件可以包含多个类,所有类都具有公有可见性
使用该类需要做的就是构造对象并按照通常的方式来调用方法:
val myCounter =new Counter //或者 new Counter()
myCounter.increment()
println(myCounter.current)
调用无参方法时,可以写上圆括号,也可以不写。一般对于改值器方法(即改变对象状态的方法)使用(),对于取值器方法(不会改变对象状态的方法)去掉()
2. 带getter和setter的属性
scala对每个字段都提供getter和setter方法。例如:
class Person{
val age=0
}
scala生成面向JVM的类,其中有一个私有的age字段以及相应的getter和setter方法。这两个方法是公有的,因为我们没有将age声明为private。(对私有字段而言,getter和setter方法也是私有的。)
在scala中,getter和setter分别叫做age 和 age_=。 例如:
println(fred.age) //将调用方法 fred.age()
fred.age = 21
也可以重新定义getter和setter方法。例如:
class Person{
private var privateAge=0
def age=privateAge
def age_=(newValue: Int) {
if(newValue>privateAge) privateAge = newValue
}
}
如果字段是私有的,则getter 和setter 方法也是私有的
如果字段是val,则只有getter方法被生成
如果你不需要任何getter或setter,可以将字段声明为private[this]
3. 只带getter的属性
如果属性的值在对象构建完成后就不再改变,则可以使用val 字段
scala会生成一个私有的final字段和一个getter方法,但没有setter
实现属性的四中方法:
var foo : Scala 自动合成一个getter 和setter
val foo : Scala 自动合成一个getter
由你来定义foo 和 foo_=方法
由你来定义 foo 方法
4. 对象私有字段
scala中,方法可以访问该类的所有对象的私有字段。例如:
class Counter{
private var value =0
def increment() { value +=1 }
def isLess ( other :Counter) =value <other.value
}
之所以访问other.value 是合法的,是因为other 也同样是 Counter 对象
scala 允许定义更加严格的访问限制,通过private[this]这个修饰符来实现对象私有
private [this] var value =0 //类似某个对象 . value这样的访问将不被允许
对于类私有的字段,scala 生成私有的getter 和setter 方法。但是对于 对象私有的字段, scala根本不会生成 getter 或者 setter 方法
5. Bean 属性
当你将scala字段标注为 @BeanProperty时,这样的方法会自动生成。例如:
import scala.reflect.BeanProperty
class Person{
@BeanProperty var name:String=_
}
将会生成四个方法:
1) name:String
2) name_=(newValue:String):Unit
3) getName():String
4) setName(newValue:String):Unit
6. 辅助构造器
scala可以有任意多个构造器,一个主构造器和任意多个辅助构造器
辅助构造器的名称为this;每个辅助构造器必须以一个对先前已定义的其他辅助构造器或主构造器的调用开始
7. 主构造器
在scala中,每个类都有主构造器。主构造器并不以this方法定义,而是与类定义交织在一起
1) 主构造器的参数直接放置在类名之后
calss Person( val name: String, val age : Int) {
//(....) 中的内容就是主构造器的参数
...}
2) 主构造器会执行类定义中的所有语句。例如:
class Person( val name:String, val age : Int) {
println(" Just anoter person")
def desciption = name + " is "+ age + "years old"
}
println 语句是主构造器的一部分。每当有对象被构造出来时,上述代码就会被执行。
8. 嵌套类
scala中可以在函数中定义函数,在类中定义类
相关文章推荐
- Scala学习教程笔记一之基础语法,条件控制,循环控制,函数,数组,集合
- scala学习笔记——操作符
- Scala学习笔记(八) - 特质
- apply方法 Scala学习笔记-面向对象篇
- Scala 学习笔记(四)------定义递归函数
- Scala学习笔记 --- 求两个时间的差
- ListBuffer、ArrayBuffer、Queue、Stack操作代码实战之Scala学习笔记-30
- scala学习笔记4(apply方法)
- scala学习笔记:面向对象编程基础
- scala学习笔记(1)
- scala学习笔记06--主从构造器
- scala 学习笔记(03) 参数缺省值、不定个数参数、类的属性(Property)、泛型初步
- scala 学习笔记(04) OOP(上)主从构造器/私有属性/伴生对象(单例静态类)/apply方法/嵌套类
- Scala学习笔记(一)
- Scala学习笔记22【继续学习Scala List的使用】
- Scala2.11.7学习笔记(八)高阶函数
- Scala学习笔记7 (actor)
- scala编程第17章学习笔记(4)——元组
- 第58课:使用Java和Scala在IDE中开发DataFrame实战学习笔记
- scala学习笔记3