属性 及其访问权限

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()方法,传入参数表示方法的重载。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。