标签:var add 自己 final color unit 前缀 ring acl
创建一个scala class来定义我们的一个类。类当中可以定义各种属性或者方法,或者函数都可以
????class Person { ??????//定义一个属性,叫做name的,使用val不可变量来进行修饰 ??????// 用val修饰的变量是可读属性,有getter但没有setter(相当与Java中用final修饰的变量) ??????val name:String ="zhangsan" ??????//定义一个属性,叫做age的,使用var可变量来进行修饰 ??????//用var修饰的变量都既有getter,又有setter ??????var age:Int = 28 ???? ? ??????//类私有字段,只能在类的内部使用或者伴生对象中访问 ??????private val??address:String = "地球上" ???? ? ??????//类私有字段,访问权限更加严格的,该字段在当前类中被访问 ??????//在伴生对象里面也不可以访问 ??????private[this] var pet = "小强" ???? ? ??????//在类当中定义了一个方法, ??????def hello(first:Int,second:String):Int ={ ????????println(first+"\t"+second) ????????250 ??????} ??????/** ????????* 定义了一个函数 ????????*/ ??????val func1 =(x:Int,y:Int) =>{ ????????x+y ??????} ????} |
? ?
如果想要使用类的话,那么REPL就满足不了我们的要求了,我们重新创建一个对应的Object的scala文件
????object ScalaClass { ??????def main(args: Array[String]): Unit = { ????????//创建对象两种方式。这里都是使用的无参构造来进行创建对象的 ????????val person = new Person ????????val person1 = new Person() ????????//注意,我们可以使用对象的属性加上_= 给var修饰的属性进行重新赋值 ????????//其实就是调用set方法,方法名叫做 age_=???? ????????person.age_= (50) ????????//直接调用类的属性,其实就是调用get方法 ????????println(person.age) ????????println(person.hello(50,"helloworld")) ????????val func = person.func1(10,20) ????????println(func) ????????println("============") ??????} ????} |
? ?
对于scala类中的每一个属性,编译后,会有一个私有的字段和相应的getter、setter方法生成
????//getter方法 ????println(person age) ????//setter方法 ????println(person age_= (18)) ????//getter方法 ????println(person.age) |
? ?
? ?
当然了,你也可以不使用自动生成的方式,自己定义getter和setter方法
class Dog2 { ??private var _leg = 4 ??def leg = _leg ??def leg_=(newLeg: Int) { ????_leg = newLeg ??} } |
? ?
使用之:
val dog2 = new Dog2 dog2.leg_=(10) println(dog2.leg) |
? ?
规范提示:自己手动创建变量的getter和setter方法需要遵循以下原则:
1) 字段属性名以"_"作为前缀,如:_leg
2) getter方法定义为:def leg = _leg
3) setter方法定义时,方法名为属性名去掉前缀,并加上后缀,后缀是:"leg_=",如例子所示
? ?
scala当中类的构造器分为两种:主构造器和辅助构造器
scala当中规定,所有的辅助构造器,最后都必须调用另外一个构造器,另外一个构造器可以是辅助构造器,也可以是主构造器
????//主构造器,直接定义在类上面 ????class Dog (name:String,age:Int){ ???? ? ??????//在scala当中,可以直接将代码写在class当中,而在java当中, ??????//代码必须包含在方法当中。 ??????//其实在scala当中,虽然你把代码写在了Class类当中,经过编译之后, ??????//class类的代码都进入到了主构造器方法当中去了 ??????println(name) ??????println(age) ???? ? ??????var gender:String = ""; ???? ? ?????? def this(name:String,age:Int,gender:String){ ????????//每个辅助构造器,都必须以其他辅助构造器,或者主构造器的调用作为第一句 ????????this(name:String,age:Int) ????????this.gender = gender ??????} ???? ? ??????var color =""; ???? ? ??????/** ????????* 我们也可以通过private来进行修饰我们的构造器, ????????* @param name ????????* @param age ????????* @param color ????????* @param gender ????????*/ ??????private def this(name:String,age:Int,color:String,gender:String){ ????????this(name:String,age:Int) ????????this.color = color ??????} ???? ? ? ? } |
? ?
标签:var add 自己 final color unit 前缀 ring acl
原文地址:https://www.cnblogs.com/starzy/p/10466517.html