Latest web development tutorials

Scala dostępu modyfikator

Scala i Java modyfikatory dostępu, podobnie jak podstawowy, odpowiednio: private, protected publicznego.

Jeśli nie podasz modyfikator charakter dostępu domyślnie obiekty Scala poziomu dostępu są jawne.

Scala kwalifikator w prywatnych, bardziej rygorystyczne niż Java, w przypadku zagnieżdżonych klasy zewnętrzna klasa może nawet nie być zagnieżdżone dostępowych klasy prywatnych członków.


Prywatnych (private) członków

Zmodyfikowana z prywatnym hasła, członkowie z tego znaku zawiera jedynie członkiem klasy lub przedmiot zdefiniowane wewnętrzne widoczne, ta sama zasada odnosi się również do klas wewnętrznych.

class Outer{
    class Inner{
    private def f(){println("f")}
    class InnerMost{
        f() // 正确
        }
    }
    (new Inner).f() //错误
}

(New Wewnętrzna) .f () dostęp nie jest legalne w wewnętrznych, ponieważ f jest zadeklarowana jako prywatne, ale dostęp nie mieści się w kategorii Wewnętrzna.

Dostęp f, ale nie ma problemu w najgłębszej, ponieważ wizyta ta jest zawarta w klasie Wewnętrznej.

Java ma dostęp do obu, ponieważ umożliwia dostęp do zewnętrznych klasy prywatnych członków klas wewnętrznych.


Protection (ochrona) członków

W Scala, ochrona dostępu (zabezpieczony) członkowie są bardziej rygorystyczne niż Java. Gdyż pozwala ochrona członków podklasy jest zdefiniowana w członie klasy są dostępne. W Javie użyć słowa kluczowego chronione zmodyfikowane członków, oprócz definicji podklasy klasy mogą uzyskać dostęp do elementu, z pakietem innych klas można również uzyskać.

package p{
class Super{
    protected def f() {println("f")}
    }
	class Sub extends Super{
	    f()
	}
	class Other{
		(new Super).f() //错误
	}
}

Powyższy przykład, Sub rodzaj dostępu nie jest problemem dla f, ponieważ f jest zadeklarowana jako chronione w Super i Super Sub jest podklasą. W przeciwieństwie do tego, inne nie ma dostęp do F, ponieważ nie ma innego odziedziczone Super. Choć ta ostatnia również ujmowane w Javie, bo z innymi podsystemami w tym samym worku.


Publiczne (public) członków

Scala, jeśli nie określił żadnych modyfikatorów, domyślnie jest publiczna. Taki element można uzyskać w dowolnym miejscu.

class Outer {
   class Inner {
      def f() { println("f") }
      class InnerMost {
         f() // 正确
      }
   }
   (new Inner).f() // 正确因为 f() 是 public
}

Zakres ochrony

Scala, modyfikator dostępu można podkreślić za pomocą kwalifikatorów. Format jest następujący:

private[x] 

或 

protected[x]

Gdzie X oznacza pakiet należy do klasy lub jednoelementowy obiektu. Jeśli napisany w prywatnym [x], przeczytaj "W uzupełnieniu do członków organów [...] lub w klasie [...] z klas w opakowaniach i ich związanego obrazie widoczne na zewnątrz, dla wszystkich innych klas są prywatne.

Technika ta jest przydatna w poprzek kilku dużych projektów w ramach pakietu, który pozwala zdefiniować kilka sub-pakiet w projekcie widocznych zewnętrznych klientów ale projekt ma zawsze niewidzialne rzeczy.

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
        }
    }
}

Powyższy przykład Navigator klasa jest oznaczone jako prywatne [bobsrockets] To jest klasa wszystkich klas i obiektów zawartych w pakiecie bobsrockets widoczne.

Na przykład, od wjazdu pojazdu do obiektu w nawigatorze jest dozwolona, ​​ponieważ obiekt pojazdu zawarte w uruchomieniu pakietu, natomiast w bobsrockets uruchomić pakiet, a wręcz przeciwnie, cały kod poza bobsrockets pakietowych mogą uzyskać dostęp do klasy Navigator.