如果你对Java比较了解的话,那么本章内容将会对你来说非常简单,并且你会很享受Scala更加精简的表示法带来的遍历。
class Counter{
private var value=0 //初始化字段
def increment(){
value +=1
}//方法默认是共有的
def current()=value
}
在Scala中,类并不声明为public , Scala源文件可以包含多个类,所有这些类都具有共有可见性。
使用该类需要做的就是构造对象并按照普通的方式来调用方法
val myCounter=new Counter()
myCounter.increment()
println(myCounter.current)
调用无参方法时,可以写上(),也可以不写;
带有getter和setter的属性
在Java中我们在定义一个类时,我们会经常使用private私有化变量,然后我们就会使用get和set方法来定义私有化的变量,这样做就会安全的多。那么我们来写一段java的get和set代码一会跟Scala做一下比较
public class Person{
private int age;
public int getAge(){ return age;}//这是返回变量age
public void setAge(int newAge){
if(newAge> age){
age = newAge
}
}//set方法,让年龄不能倒退。只能大不能小
}
这段是非常经典的get,set代码的示例。
接下来调用get,set方法
Person p=new Person
p.set(21)
println(p.get)//21
p.set(20)
println(p.get)//21
之所以说get,set方法比公有字段更好,是因为它们让你们可以从简单的get/set机制出发,并在需要的时候进行改进。
Scala对每个字段都有提供get和set方法。在这里,我们定义一个共有字段
class Person{ var = 0 }
scala 中有一个私有的age字段以及相应的get和set方法。这两个方法是共有的,因为我们没有将age声明为private。,在scala中,get和set分别叫做age和age_。
例如:
class Person{
private var prvAge = 0 //初始化变量
def age = prvAge
def age_=(newAge:Int){
if(newAge > prvAge){
prvAge = newAge //不能变年轻
}
}
}
那么我们现在来调用一下Scala编写的get和set方法
val per=new Person
p.age = 21
p.age = 20
println(p.age)//21
相对于Java来说在编写简洁的很多,如果代码量上来的话,那么简易程度还是很可观的
辅助构造器
Scala可以有任意多的构造器,不过,Scala类有一个构造器比其他所有构造器都更为重要,他就是主构造器。除了主构造器外,类还有任意多的辅助构造器。
我们将首先讨论辅助构造器:
1.辅助构造器的名称为this
2.每一个辅助构造器都必须以一个对先前已定义的其他辅助构造器或主构造器的调用开始。
class Person{
private var name = ""
private var age = 0
def this(name :String){//辅助构造器1
this()//主构造器
this.name = name
}
def this(name:String ,age:Int){//辅助构造器2
this(name)//辅助构造器1
this.age= age
}
}
一个类当中如果没有显示的定义主构造器的话,那么将自动自动拥有一个无参的主构造器
现在我们开始调用它
val p=new Person//这个是启动主构造器
val p1=new Person("小明")//这个是启动主构造器1
val p2=new Person("小明",18)//这是启动主构造器2
接下来我们说一下主构造器。
1.主构造器的参数直接放在类名的后面 注意:主构造器不是this定义
class Person(name:String,age:Int){
//括号中的内容就是主构造器的参数
}
主构造器会执行类中的所有语句。
class Person{
private val pops=new Properties
pop.load(new FileReader("mypop.properties"))
//上述语句是主构造器的一部分
}