Scala类中的属性

简介: 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!"

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

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

  1. 属性的var与val

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

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

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

在Scala中:

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

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

在主构造器形参中,如果一个属性没有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
2
3
4
5
6
7
8
9
10
11
var和val属性被private关键字修饰时,不会生成getter和setter方法。

  1. 访问权限修饰符

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

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

  1. 作用域保护

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

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

这里对 private[this]进行说明

class Student{
private var privateAge = 0
def isYounger(other:Student)= privateAge < other.privateAge
//类的方法可以访问这个类的所有对象的私有字段(或私有属性)
//所以isYounger这个方法可以访问Student这个类的other对象的私有属性privateAge
}
1
2
3
4
5
6
class Student{
private[this] var privateAge = 0
def isYounger(other:Student)= privateAge < other.privateAge//报错
}
1
2
3
4
private[this]限定了这个类的方法只能访问自己对象的属性privateAge,不能访问其他对象(即使这个对象是根据这个类生成)的属性。

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

相关文章
|
Scala
166 Scala 模式匹配和样例类
166 Scala 模式匹配和样例类
85 0
|
5月前
|
Scala
scala-模式匹配(字符串、数组、元组、集合、类、偏函数)
scala-模式匹配(字符串、数组、元组、集合、类、偏函数)
27 0
|
6月前
|
Scala
Scala中的类和对象:定义、创建和使用
Scala中的类和对象:定义、创建和使用
159 1
|
6月前
|
分布式计算 Java 大数据
Scala:样例类、模式匹配、Option、偏函数、泛型(三)
Scala:样例类、模式匹配、Option、偏函数、泛型(三)
76 0
|
Scala
163 Scala 类
163 Scala 类
36 0
|
设计模式 Ubuntu Java
|
分布式计算 Java Scala
scala中的模式匹配和样例类
scala有一个十分强大的模式匹配机制,可以应用到很多场合。java switch caseswitch语句类型查询以及快速获取数据并且scala还提供了样例类,对模式匹配进行了优化,可以快速进行匹配。
91 0
scala中的模式匹配和样例类
|
Java 大数据 Scala
大数据开发基础的编程语言的Scala的类和对象
Scala是一种基于JVM的编程语言,它支持面向对象编程和函数式编程。本文将介绍Scala中类和对象的概念和用法,帮助开发者更好地理解和应用这门语言。
72 0
|
安全 Java 编译器
Scala快速入门-10-模式匹配与样例类
mathch表达式是一个更好的switch,不会有穿透到下一个分支的问题 如果没有模式能够匹配,会抛出MatchError,可以用case _ 模式来避免,相当于Java中的default 模式可以包含一个随意定义的条件,称做守卫 可以匹配数组、列表、元组等模式,然后将匹配到不同部分绑定到变量 样例类及密封类的模式匹配 用Option来存放可能存在也可能不存在的值,比null更安全
|
Java Scala
Scala快速入门-5-类定义
每个类都有一个主构造器,这个构造器和类的定义“交织”在一起,它的参数直接成为类的字段,主构造器执行类体中所有的语句 类中的字段自动带getter和setter方法 用@BeanProperty注解生成JavaBean的getXxx/setXxx方法 辅助构造器是可选的,它们都叫做this