Scala学习第十七弹 类

来源:互联网 发布:java中的cgi 编辑:程序博客网 时间:2024/06/05 07:41

这次主要讲scala如何实现类,如果你学习过java和c++中的类,你就会知道这并没有多难,而且你会更加享受scala简洁的表达方法的便利。

简单类和无参方法

scala类最简单的方法看上去和java或c++中的很相似:
class Couter{
private var value = 0//必须初始化字段
def increment(){ value += 1 }方法默认是公有的
def count() = value
}
在scala中,类并不声明为public。scala源文件可以包含多个类,所有这些类都具有公有可见性。
使用该类的方法就是构造对象并按照通常的方法来调用方法:
val mycounter = new Counter
mycounter.increment()
println(mycounter.count)
调用无参方法时可以协商圆括号也可以不写:
mycounter.count( )//ok
mycounter.count //ok
一般认为当调用改变对象状态的方法时使用(),当调用不改变对象状态的方法时去掉()是不错的风格。
mycounter.increment()

带有getter和setter的属性

scala对每个字段都提供getter和setter方法,定义一个公有字段:
class Person{
var age = o
scala生成面向JVM的类,其中有一个私有的age字段以及对应的setter和getter方法,这两个方法是公有的,因为我没有把age声明为private。对于私有字段而言,setter和getter方法也是私有的。
在scala中getter和setter方法分别叫做age和age_=。例如:
print(fred.age)//调用ferd.age()
fred.age_ = 20//调用ferd.age = (21)
在Scala中,getter和setter方法并非定义为getXxx和setXxx,不过他们的用意是相同的

只有getter属性

有时需要一个只读属性,只有getter方法,如果属性的值在对象构建后就不再改变,可以用val 字段:
class Message{
val timeStamp = new java.util.Date
}
scala会生成一个私有的final字段个一个getter方法,没有setter方法
但是你有是需要一个属性,客户端不能随意改值,但是可以通过其他方式。
class Counter {
private var value = 0
def increment() { value += 1 }
def count() = value
}
总结一下:实现属性时一共有四个选项:

  • var foo:scala自动生成一个getter一个setter val
  • foo:scala自动生成一个getter
  • 由你来定义foo和foo_方法
  • 由你来定义foo方法
    -注意:在scala中不能实现只写属性(即带有setter却不带getter的属性)
0 0
原创粉丝点击