Модификатор доступа Scala
Scala и Java модификаторы доступа, как и основной, соответственно: частный, защищенный, общественности.
Если вы не указываете модификатор доступа символ, по умолчанию, объекты Scala уровня доступа являются открытыми.
Scala отборочные в частных, более строгими, чем Java, в случае вложенного класса, внешний класс не может даже быть вложенными доступа класса частных членов.
Частные (частные) Члены
Модифицированный с частным ключевым словом, члены с этой меткой содержит только член класса или объект, определенный внутренний видимым, то же правило относится и к внутренним классам.
class Outer{ class Inner{ private def f(){println("f")} class InnerMost{ f() // 正确 } } (new Inner).f() //错误 }
(Новая внутренняя) .f () доступ не является законным во Внутренней, потому что е объявлен как частный, но доступ не находится в пределах категории внутренних.
Доступ к F, но нет никаких проблем в самую внутреннюю, так как этот визит входит в класс Inner.
Java разрешен доступ к обоим, поскольку она позволяет внешние доступа класса частных членов внутренних классов.
Защита (защищенный) члены
В Скале, защита доступа (защищенные) члены являются более жесткими, чем Java. Так как это только позволяет защищать членов подкласса определяется в члена класса доступен. В Java, используйте ключевое слово защищенные измененные элементы, в дополнение к определению подкласса класса может получить доступ к элементу, с пакетом других классов также могут быть доступны.
package p{ class Super{ protected def f() {println("f")} } class Sub extends Super{ f() } class Other{ (new Super).f() //错误 } }
В приведенном выше примере, Sub тип доступа не является проблемой для F, так как F объявлена как защищенная в супер и супер Sub является подклассом. В отличие от других не разрешен доступ к F, потому что нет никакого другого унаследованы от Super. В то время как последний также признается в Java, так как с другими подгруппами в одном пакете.
Общественные члены (Public)
Scala, если вы не указали никаких модификаторов, по умолчанию является публичным. Такой элемент может быть доступна в любом месте.
class Outer { class Inner { def f() { println("f") } class InnerMost { f() // 正确 } } (new Inner).f() // 正确因为 f() 是 public }
Объем охраны
Scala, модификатор доступа можно подчеркнуть с помощью классификаторов. Формат:
private[x] 或 protected[x]
Где х относится к пакету принадлежит к классу или одноточечного объекта. Если написано в частном [х], следующим образом: "В дополнение к членов [...] или в классе [...] классов в пакетах и связанных с ними изображения видимых снаружи, для всех других классов являются частными.
Этот метод полезен по ряду крупных проектов в пакете, что позволяет определить несколько суб-пакет в вашем проекте видимых внешних клиентов, но проект имеет всегда невидимое.
package bobsrocckets{ 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 } } }
В приведенном выше примере, класс Навигатор отмечен как частный [bobsrockets] То есть класс всех классов и объектов, содержащихся в пакете bobsrockets видна.
Например, от доступа автомобиля к объекту в Навигаторе допускается, так как объект транспортного средства, включенные в пакет запуска, в то время как в bobsrockets запустить пакет, наоборот, весь код вне пакета bobsrockets может получить доступ класса Navigator.