1.默认访问权限
Scala中的默认访问权限相当于Java中的public,Scala中如果一个变量没有任何修饰符,就代表默认访问权限。
作用域:全部
object class20 {
// name 属性具有默认的访问权限
class Student(var name:String) {
}
def main(args: Array[String]): Unit = {
val s1 = new Student("小花")
// 类的外部可以访问
println(s1.name)
}
}
2.protected访问权限
protected(被保护的)
在类的内部、伴生对象、子类中可以访问,在类的外部不能访问。
在类的外部,不能直接通过对象,属性的方式来访问
object class20 {
class Student(var name:String,protected var gender:String) {
}
def main(args: Array[String]): Unit = {
val s1 = new Student("小花","女")
// protected属性,在类的外部无法访问
// println(s1.gender)
}
}
在子类中,可以访问protected修饰的成员
object class20 {
class Father() {
var name:String = "小花"
protected var gender:String = "女" // 属性
protected def test(): Unit = { // 方法
println("test")
}
}
class Son extends Father{
super.test() // 在子类中,我们通过 super 来访问父类方法
println(gender)
}
def main(args: Array[String]): Unit = {
var son1 = new Son()
}
}
3.private访问权限
private(私有的)
在类的内部、伴生对象(定义方法传入类的对象)中可以访问。在类的外部不能访问。
private在子类中,无法访问
class Father() {
var name:String = "小花"
private val age:String = "18"
private def test1(): Unit = {
println("test1")
}
}
class Son extends Father{
// private 修饰的成员,不可以在子类中访问
// super.test1() 报错
// println(age) 报错
}
def main(args: Array[String]): Unit = {
var son1 = new Son()
}
}
private在伴生对象,伴生类中可以访问
object class26 {
class Student() {
private var age:Int = 10
}
object Student {
def test(stu:Student): Unit = {
// 在伴生对象中,可以通过对象,属性的方法来访问
println(stu.age)
}
}
def main(args: Array[String]): Unit = {
val stu = new Student()
// private 成员,不能在类的外部,通过对象,属性的方法来访问
// stu.age 报错
Student.test(stu)
}
}
4.private[this]访问权限
private[this]这个属性(方法)只能在调用它的同一个实例内使用
只能在类的内部访问,子类无法访问,伴生对象、伴生类无法访问。
object class26 {
class Student() {
private[this] var secret:String = "xx日,xxx事"
def test(): Unit = {
println(secret)
}
}
object Student {
def test(stu:Student): Unit = {
// private(stu.secret) 报错
}
}
def main(args: Array[String]): Unit = {
Student.test(stu)
stu.test()
}
}