Najlepszy samouczek Scala dostępu modyfikator W 2024 r. W tym samouczku możesz dowiedzieć się Prywatnych (private) członków,Protection (ochrona) członków,Publiczne (public) członków,Zakres ochrony,
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.
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.
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.
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 }
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 [pl.] lub w klasie [pl.] 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.