scala学习——类
2016-03-08 22:17
281 查看
1.简单类和无参方法
class person{ private var name = "Joe" private var age = 20 def yourName() = name def yourage = age def increment(){ age +=1 } def myprint():Unit={ println(name+" is "+age+" years old !") } }
1).在scala中,类并不声明为public。scala源文件中可以包含多个类,故这些类具有公有可见性;
2).字段必须初始化;
3).方法默认是公有的;
4).调用无参方法时,可以写圆括号,也可以不写。通常我们对取值器省略括号,而改值器使用括号。如:调用以上程序中increment()时使用括号,二调用myprint方法时不使用括号。
5).若对于无参方法,定义时,没有使用圆括号,在调用时也不能使用圆括号。
2.带getter和setter的属性
A.默认的getter和setter方法
class student{ var id = 1001 }
*在scala中,每个字段都提供getter和setter方法,分别为:id 和 id_=。若字段为公有(public),则其getter、setter方法也是公有的;若字段为私有(private),则其getter、setter方法也是私有的。
B.自定义getter和setter方法
class student { private var id = 1001 def id = id def id_= (newId :Int){ if(id>1001) id = newId } }
C.只带getter属性
如果属性的值构建后,就不在改变,则可以使用val定义字段。class student { val city = "Beijing" ... }
此时,Scala会生成一个final字段和一个getter方法,但没有setter方法。
D.Bean属性
当我们将Scala字段标注为@BeanProperty时,getFoo/setFoo方法会自动生成。如:import scala.reflect.BeanProperty class student { @BeanProperty var name:String = _ }
此时将会生成如下四个方法:
(1).name:String
(2).name_=(newName:String):Unit
(3).getName():String
(4).setName(newName:String):Unit
3.构造器
A.辅助构造器
1).辅助构造器的名称都为this。(当我们修改类名的时候,不必向JAVA和C++一样来修改构造器)2).每个辅助构造器都必须以一个先前以定义的其他辅助构造器或主构造器的调用开始。
*如果一个类没有显式地定义一个主构造器,则自动拥有一个无参的主构造器。
class Student{ private var id = 101 private var name = "no name" def this (id:int){ //辅助构造器 this() //调用主构造器 this.id = id } def this (id:int,name:String){ //辅助构造器 this(id) //调用上一个辅助构造器 this.name = name } }
B.主构造器
1).主构造器参数直接放在类名之后。如:class Student(var id :int,var name:Stirng){ ... }
当我们实例化一个对象时,val stu = new Student(101,”Joe”),这样即完成了调用主构造器,实例化一个stu对象,并且stu.id = 101 ,stu.name=”Joe”,同时,还默认实现了id和name的getter、setter方法。
2).主构造器会执行类定义中的所有语句。如:
class Student(var id:int,var name:String){ println(name+"'s id is "+id)//在调用主构造器时,该语句也被执行 }
3).我们通常可以通过在主构造器中使用默认参数来避免过多地使用辅助构造器。如:
class Student(var id:int,var name:String ,var city="Beijing"){ ... }
4.嵌套类
在Scala中,我们可以在类中嵌套类,在函数中嵌套函数。以下是类中定义类的示例:import scala.collection.mutable.ArrayBuffer class Network{ class Member(val name:String){ val contacts = new ArrayBuffer[Member] } private val menbers = new ArrayBuffer[Member] def join (name:String){ val m = new Member(name) menbers += m m } }
相关文章推荐
- HDOJ 1850Being a Good Boy in Spring Festival(nim博弈)
- css 浮动 相对定位 绝对定位区别
- [HDOJ2586]How far away?(最近公共祖先 瞎写)
- HashMap的内部实现机制,Hash是怎样实现的,什么时候ReHash
- 1.8-自动登陆后执行命令
- Android FragmentPagerAdapter.notifyDataSetChanged() 并不能更新其 Fragment解决方案
- NFS配置
- 四通道和三通道的处理
- 1.7-自动登录expect脚本
- 求数列的和
- 数据挖掘之曼哈顿距离、欧几里距离、明氏距离、皮尔逊相关系数、余弦相似度Python实现代码
- 计算机网络体系结构—数据传递流
- 面向对象
- 2016年的第 10 周
- 安卓学习_contentprovider()_查询手机联系人查找
- 对象的困惑
- hdu 1829 A Bug's Life(种类并查集)
- 按钮的type会对ajax的异步请求处理有影响
- 学习git的内容
- 学期计划