Scala类的介绍

1. 简单类和无参方法

Scala类最简单的形式看上去和Java或C++中很相似:

class Counter {
    private var value = 0 // 必须初始化字段

    def incremet() { // 方法默认是公有的
        value += 1
    }

    def current() = value
}

在Scala中,类并不声明为public。Scala源文件可以包含多个类,所有这些类都具有公有可见性。
使用该类需要做的就是构造对象并按照通常的方式来调用方法:

        val myCounter = new Counter // 或调用 new Counter()
        myCounter.incremet() //还可以myCounter.incremet这样调用 对于无参方法当定义方法时加(),调用时带不带()都可以
        println(myCounter.current) //但定义方法时,没有(),调用时也不能带()

2. 带getter和setter的属性

编写Java类时,我们并不喜欢公有字段:

public class Person {
public int age; // Java中不鼓励这样做
}

使用公有字段的话,任何人都可以写入fred.age。这就是为什么我们更倾向于使用getter和setter方法:

public class Person {
private int age;
public int getAge() { return age;}
public void setAge() { return this.age = age;}
}

像这样的一对getter/setter通常称作属性(property)。我们会说Person类有一个age属性。
这到底好在哪里呢?仅从它自身来说,并不比公有字段来得更好。任何人都可以调用fred.setAge(21)。
不过如果这是个问题,我们可以防止它发生:

public void setAge(int newValue) { if (newValue > age) age = newValue; }
// 不能让数字变得明显不合理

之所以说getter和setter方法比公有字段更好,是因为它们让你可以简单的从get/set机制出发,并在需要的时候做出改进。
Scala 对每个字段都提供getter和setter方法。例如:

class Person {
    var age = 0
}

Scala生成面向JVM的类,其中有一个私有的age字段以及相应的getter和setter方法。这两个方法是公有的,因为我们没有将age声明为private。(对私有字段而言,getter和setter方法也是私有的。)
在Scala中,getter和setter分别叫做age和age_=。例如:

println(fred.age) // 将调用方法fred.age()
fred.age = 21 // 将调用fred.age = (21)

在这里插入图片描述在任何时候你都可以自己重新定义getter和setter方法。例如:

class Person {
    private var privateAge = 0

    def age = privateAge

    def age_=(newValue: Int): Unit = {
        if (newValue > privateAge) privateAge = newValue
    }
}

3. 只有getter的属性

如果属性的值在对象构建完成后就不再改变,则可以使用val字段。

Scala会生成一个私有的final字段和一个getter方法,但没有setter。
不过,有时候需要这样一个属性,客户端不能随意该值,但它可以通过其他的方式被改变。文章开头的Counter类就是一个很好的例子。从概念上讲,counter有一个current属性,当increment方法被调用时更新,但并没有对应的setter。

所以,在实现属性时有如下四个选择:

  1. var foo: Scala自动合成一个getter和一个setter。
  2. val foo: Scala自动合成一个getter。
  3. 自己定义foo和foo_=方法。
  4. 自定义foo方法。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值