网站开发协议合作,lnmpa 搭建wordpress,学平面设计好找工作吗,手机制作视频软件app1、Scala 访问修饰符
Scala 访问修饰符基本和Java的一样#xff0c;分别有#xff1a;private#xff0c;protected#xff0c;public。 如果没有指定访问修饰符#xff0c;默认情况下#xff0c;Scala 对象的访问级别都是 public。 Scala 中的 private 限定符#xff…1、Scala 访问修饰符
Scala 访问修饰符基本和Java的一样分别有privateprotectedpublic。 如果没有指定访问修饰符默认情况下Scala 对象的访问级别都是 public。 Scala 中的 private 限定符比 Java 更严格在嵌套类情况下外层类甚至不能访问被嵌套类的私有成员。
2、私有(Private)成员
用 private 关键字修饰带有此标记的成员仅在包含了成员定义的类或对象内部可见同样的规则还适用内部类。
class Outer{class Inner{private def f(){println(f)}class InnerMost{f() // 正确}}(new Inner).f() //错误
}(new Inner).f( ) 访问不合法是因为 f 在 Inner 中被声明为 private而访问不在类 Inner 之内。
但在 InnerMost 里访问 f 就没有问题的因为这个访问包含在 Inner 类之内。
Java中允许这两种访问因为它允许外部类访问内部类的私有成员。
3、保护(Protected)成员
在 scala 中对保护(Protected)成员的访问比 java 更严格一些。因为它只允许保护成员在定义了该成员的的类的子类中被访问。而在java中用protected关键字修饰的成员除了定义了该成员的类的子类可以访问同一个包里的其他类也可以进行访问。
package p{
class Super{protected def f() {println(f)}}class Sub extends Super{f()}class Other{(new Super).f() //错误}
}上例中Sub 类对 f 的访问没有问题因为 f 在 Super 中被声明为 protected而 Sub 是 Super 的子类。相反Other 对 f 的访问不被允许因为 other 没有继承自 Super。而后者在 java 里同样被认可因为 Other 与 Sub 在同一包里。
4、公共(Public)成员
Scala 中如果没有指定任何的修饰符则默认为 public。这样的成员在任何地方都可以被访问。
class Outer {class Inner {def f() { println(f) }class InnerMost {f() // 正确}}(new Inner).f() // 正确因为 f() 是 public
}5、作用域保护
Scala中访问修饰符可以通过使用限定词强调。格式为:
private[x]
或
protected[x]这里的x指代某个所属的包、类或单例对象。如果写成private[x],读作这个成员除了对[…]中的类或[…]中的包中的类及它们的伴生对像可见外对其它所有类都是private。 这种技巧在横跨了若干包的大型项目中非常有用它允许你定义一些在你项目的若干子包中可见但对于项目外部的客户却始终不可见的东西。
package bobsrockets{package navigation{private[bobsrockets] class Navigator{protected[navigation] def useStarChart(){}class LegOfJourney{private[Navigator] val distance 100}private[this] var speed 200}}package launch{import navigation._object Vehicle{private[launch] val guide new Navigator}}
}上述实例中类 Navigator 被标记为 private[bobsrockets] 就是说这个类对包含在 bobsrockets 包里的所有的类和对象可见。 比如说从 Vehicle 对象里对 Navigator 的访问是被允许的因为对象 Vehicle 包含在包 launch 中而 launch 包在 bobsrockets 中相反所有在包 bobsrockets 之外的代码都不能访问类 Navigator。