1.声明属性
访问权限 var|val 属性名 : 属性类型 = 属性值
- 私有属性(private)
1)私有属性只能类的内部使用,外部无法使用
2)私有属性,不仅仅是属性私有化,编译后生成的set,get方法也是私有的。
private var name : String = _
3)在java中包访问权限为默认,但是在scala中,没有包访问权限的概念, private后需要增加中括号,指明能访问的包的名称
private[chapter06] var email : String = _
表示email 能被chapter06包访问。
package com.atguigu.bigdata.scala.chapter06
object Scala04_Field {
def main(args: Array[String]): Unit = {
val user = new User06()
//user能访问email属性
println(user.email)
}
}
class User06 {
private[chapter06] var email : String = "xxxx@xxx.com"
}
4)类的属性在编译后全部都是private的属性,但是同时提供2个公共的方法(set, get)用于访问这个属性
类的属性在编译后全部都是private
如下能访问
package com.atguigu.bigdata.scala.chapter06
object Scala04_Field {
def main(args: Array[String]): Unit = {
val user = new User06()
//给对象的属性赋值等同于调用对象的属性的set方法
user.sex = "女"
}
}
class User06 {
var sex : String = "男"
}
原因是提供了public的set和get方法,如图所示下方
提供了public的set和get方法
给对象的属性赋值等同于调用对象的属性的set方法。
获取对象的属性值等同于调用对象的属性的get方法
- 受保护的(protected)
1)scala中受保护的权限只能子类访问,同包访问不了
语法:
protected var age : Int = _
package com.atguigu.bigdata.scala.chapter06
object Scala04_Field {
def main(args: Array[String]): Unit = {
val user = new User06()
//user不能访问age属性
}
}
class User06 {
protected var age : Int = 20
}
class User066 extends User06{
this.age
}
- 当属性前不加任何的访问权限时,默认为公共的。任何地方都可以访问
var sex : String = "男"
- 类的属性前增加val关键字,等同于编译后增加final关键字, 使用val时必须给定值,不能使用下划线进行初始化
val sex : String = "男"
反编译看到final
- scala为了和java的开发规范匹配,提供注解(@BeanProperty)来生成4个set/get方法
(包括getClass()和setClass())
@BeanProperty var address : String = _
BeanProperty
图中sex()方法如果不传入参数就会报错,因为注解(@BeanProperty)已经生成了无参的sex()方法,传入参数表示方法的重载。