栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【scala】类的属性

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【scala】类的属性

1. 属性的声明方法 1.1 在主构造器形参中声明

class Student (val name: String,var age: Int){
    println("Primary constructor and Auxiliary constructor!")
    def fun = name + " is " + age +" years old!"
}

Scala 类的主构造器函数的形参包括三种类型:未用任何修饰、var 修饰、val 修饰:

  • 未用任何修饰符修饰,这个参数就是一个局部变量,但当其被至少一个方法使用时,就变为属性,但该属性只能在类内访问!
  • var 修饰参数,作为类的成员属性使用,可以修改
  • val 修饰参数,作为类只读属性使用,不能修改
1.2 在主构造器内部声明

在主构造器内部使用val或者var声明的变量都是类的属性

2. 属性的var与val
  1. scala中类的属性默认都是private类型的,但默认会生成public类型的getter()和setter(),即私有属性,公有方法。

  2. scala中没有public关键字,没有修饰符的属性用起来就像public一样,但是其底层是private实现的

  3. 在scala中,getter与setter并不是被命名为getXXX和setXXX,而是XXX()和XXX_eq()

在Scala中:

  1. 如果一个属性被声明为var且没有任何修饰符, Scala会为该字段生成公有的getter和setter方法。

  2. 如果属性是val且没有任何修饰符, Scala生成一个私有的final字段和一个getter方法,但是没有setter。

  3. 在主构造器形参中,如果一个属性没有var或者val的修饰符, Scala不会生成getter和setter方法。

object Demo{
	def main(args:Array[String]): Unit={
		val p = new Person("xxx")
		println(p.name) //访问不到
		p.name = "ddddd" //访问不到
	}
	
	class Person(name:String){

	}
}
  1. var和val属性被private关键字修饰时,不会生成getter和setter方法。
3. 访问权限修饰符

private :私有权限,只在类的内部和伴生对象中可用。

protected :受保护权限,Scala 中受保护权限比 Java 中更严格,同类、子类可以访问,同包无法访问

4. 作用域保护

Scala中,访问修饰符可以通过使用限定词强调。格式为:

private[x]或protected[x]

这里的x指代某个所属的包、类或单例对象。如果写成private[x],读作"这个成员除了对[…]中的类或[…]中的或[this]中的包中的类及它们的伴生对像可见外,对其它所有类都是private。

这里对 private[this]进行说明

class Student{  
  private var privateAge = 0
  def isYounger(other:Student)= privateAge < other.privateAge   
  //类的方法可以访问这个类的所有对象的私有字段(或私有属性)
  //所以isYounger这个方法可以访问Student这个类的other对象的私有属性privateAge
 }
class Student{  
  private[this] var privateAge = 0
  def isYounger(other:Student)= privateAge < other.privateAge//报错
}

private[this]限定了这个类的方法只能访问自己对象的属性privateAge,不能访问其他对象(即使这个对象是根据这个类生成)的属性。

即这个属性只能是当前对象私有,isYounger()不能访问别的对象的私有成员。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1031272.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号