Latest web development tutorials

Модификатор доступа 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.