主类:
packagecom.learn.scala.day9
/**
* Created by zhuqing on 2017/2/28.
*/
objectDay9Class {
defmain(args: Array[String]): Unit = {
/**
* 初始化类时,可以用括号也可以不用括号
* var person = new Person()
*/
valperson =newPerson
//实际调用的是 name_=(String)
person.name="Tom"
//实际调用的是 age_=(Int)
person.age=12
//如果方法没有参数,可以不写括号
person incrementAge;
//person.age实际调用的方法是age()
println("age="+ person.age)
person incrementAgeNoBody;
println("age="+ person.age);
//实际调用的是方法 call_=(call:String)
person.call ="old man"
println(person.name+" is "+ person.call)
person.setId("11-01")
valrobbie =newPerson
robbie.setId("11-02")
robbie.name="robbie"
//@BeanProperty默认生成的Java式的get,set方法
robbie.setSchoolName("BeiFang")
println(robbie.getSchoolName)
//标注为@BeanProperty后,默认的get,set方法存在
robbie.schoolName="NanFang"
println(robbie.schoolName)
}
}
学习类:
packagecom.learn.scala.day9
importscala.beans.BeanProperty
/**
* Scala的类与Java的类似,scala中默认为公开类
* Created by Robbie on 2017/2/28.
*/
classPerson {
/**
* 属性默认为公开,但是必须给默认值,这点不像Java
* Java类中的属性一般为私有,让后提供公开get/set方法,但Scala中不提倡这样中,
* Scala认为这样纯粹是多写代码,浪费时间。
* Scala默认生成get,set 方法,
* 1.例如age , get方法:age(),set方法age_=(Int),
* 2.如果属性是私有的,生成的方法也是私有的。
* 如果属性是公有的,生成的方法也是公有的。
* 3.对val的属性只会生成get方法
*
*/
varname:String=""
varage: Int =0
//called 是私有的
private varcalled:String="";
/**
* Scala提供了比Java更严的访问限制, private[this]表示,只能在当前实例中使用
*/
private[this]varid=""
/**
* //@BeanProperty会自动生成Java规范的get,set方法
* 标注为@BeanProperty后,原来默认的get,set方法存在
*/
@BeanPropertyvarschoolName:String=""
/**
* 设置Id
*
*@param id
*/
defsetId(id:String): Unit = {
this.id= id
}
/**
* called 的get方法
*
*@return
*/
defcall =called
/**
* called的set方法
*
*@return
*/
defcall_=(call:String) = {
if(age<10) {
called="child"
}else if(age<20) {
called="boy"
}else if(age<30) {
called="man"
}else{
called= call
}
}
/**
* 方法默认公开
*/
defincrementAge(): Unit = {
age=age+1
}
/**
* 方法的简写可以不带括号
*/
defincrementAgeNoBody =age=age+1
override defequals(obj: Any): Boolean = {
valother = obj.asInstanceOf[Person]
//other.id 报错,因为Id是private[this],尽管class相同,但不能在其他实例中使用,
//other.called是可以调用的
if(!this.called.equals(other.called)) {
false
}else if(!this.name.equals(other.name)) {
false
}else{
true
}
}
}