目录

Scala 访问控制修饰符

2018年05月15日 17:06 | 2370次浏览

包的成员,类或对象可以使用访问控制修饰符,比如private和protected来修饰,通过这些修饰符可以控制其他部分对这些类,对象的访问。Scala和访问控制大体上和Java类似,但也有些重要的不同,本篇将介绍这些。

私有成员

Scala的私有成员和Java类似,一个使用private修饰过的类或对象成员,只能在该类或对象中访问,在Scala中,也可以在嵌套的类或对象中使用。比如:

class Outer{
  class Inner{
    private def f(){
      println("f")
    }
    
    class InnerMost{
      f() //OK
    }
  }
  
  (new Inner).f();// error: f is not accessible
}

在Scala中,(new Inner).f()是不合法的,因为它是在Inner中定义的私有类型,而在InnerMost中访问f却是合法的,这是因为InnerMost是包含在Inner的定义中(子嵌套类型)。 在Java语言中,两种访问都是可以的。Java允许外部类型访问其包含的嵌套类型的私有成员。


保护成员

和私有成员类似,Scala的访问控制比Java来说也是稍显严格些。在Scala中,由Protected定义的成员只能由定义该成员和其派生类型访问。而在Java中,由Protected定义的成员可以由同一个包中的其它类型访问。在Scala中,可以通过其它方式来实现这种功能。

下面为protected的一个例子:

class p{
  class Super{
    protected def f() {
      println("f")
    }
  }
  
  class Sub extends Super{
    f()
  }
  
  class Other{
    (new Super).f() //error: f is not accessible
  }
}


公开成员

public访问控制为Scala定义的缺省方式,所有没有使用private和protected修饰的成员都是“公开的”,可以被自由访问。Scala不需要使用public来指定“公开访问”修饰符。



小说《我是全球混乱的源头》

感觉本站内容不错,读后有收获?小额赞助,鼓励网站分享出更好的教程