Modyfikatory poziomu dostępu. Modyfikatory dostępu
Tutaj spróbujemy rozważyć prawie wszystkie przypadki stosowania modyfikatorów dostępu. Wyjątkiem będzie tylko ich użycie do zagnieżdżenia ( zagnieżdżony.) i wewnętrzny ( wewnętrzny) Klasy, a także dla interfejsów, ponieważ te tematy, których jeszcze nie uwzględniliśmy.
Klasy i pakiety są używane w połączeniu z modyfikatorami dostępu służą jako enkapsulację za pomocą ukrywania szczegółów wdrażania przez prosty interfejs.
Modyfikatory dostępu mogą być stosowane zarówno do zajęć, jak i ich członków - pola i metody. W sumie istnieją cztery modyfikatory dostępu, a tutaj przyniesiemy ich krótki opis, a następnie rozważmy szczegółowo.
- publiczny - każdy składnik zadeklarowany jako publiczny, Dostępny z dowolnego kodu
- chroniony. - umożliwia dostęp do komponentu w pakiecie i klasach spadkobierców
- prywatny - umożliwia dostęp do komponentu w klasie
- domyślna (brak słów kluczowych) - umożliwia dostęp do komponentów w pakiecie
Klasy spadkobierców są zajęciami odziedziczonymi z dowolnej klasy. Dziedzictwo, jeszcze nie studiowaliśmy.
Dostęp do klas
Domyślne klasy najwyższego poziomu są dostępne w pakiecie, w którym są zdefiniowane.. Jeśli jednak klasa najwyższej klasy zostanie uznana za publiczny, Jest dostępny wszędzie (lub wszędzie, gdzie sam pakiet jest dostępny). Ograniczyliśmy to zatwierdzenie według klasy najwyższego poziomu, ponieważ klasy można ogłosić jako członkowie innych klas. Ponieważ te klasy wewnętrzne są członkami klasy, podlegają one zasadami monitorowania dostępu do członków klasy.
Dostęp do członków klasy
Członkowie klasy są zawsze dostępne w ciele ciała. Domyślna Członkowie klasy są również dostępne w pakiecie, w którym zdefiniowana jest klasa..
Publiczny modyfikator
Dla klasy, która nie jest wbudowana, można określić tylko jeden z dwóch możliwych poziomów dostępu: określony domyślna i publiczny . Kiedy klasa jest zadeklarowana jako publiczny, musi być jedynym publiczny Klasa zadeklarowana w pliku, a nazwa pliku musi dopasować nazwę klasy.
w jaki sposób publiczny Klasy, pola, metody i projektanci można ogłosić.
Chroniony modyfikator.
Rozważymy ten modyfikator szczegółowo w przedmiocie dziedziczenia zajęć. Jeśli dziedzictwo nie jest używane, to ten modyfikator działa, a także domyślny modyfikator.
Jedyna rzecz, którą można krótko powiedzieć, że składniki zadeklarowane jako chroniony.będzie miał dostęp każda klasa dzieci z dowolnego pakietu Lub dowolna klasa z tego samego pakietu.
w jaki sposób chroniony. Pola, metody, projektanci, zainwestowane klasy i zagnieżdżone interfejsy można ogłosić.
chroniony. .
Prywatny modyfikator
Najbardziej trudno ograniczyć modyfikator dostępu. Elementy ogłoszone prywatny Dostępne tylko w tej samej klasie i każdy poza klasą.
w jaki sposób prywatny Fields, metody, projektanci, wbudowane klasy i zagnieżdżone dożylne można ogłosić.
Klasy i interfejsy górnego poziomu nie można ogłosić jako prywatny .
Zasadniczo modyfikatory dostępu są prostym tematem, ale także wrócimy do niego. Chociaż był tylko znajomy. A teraz trochę praktyki ...
Stworzyłem klasy mod02.java, defmod.java, Promod.java i Prvmod.java należą do pakietu PRO.JAVA.PKG002, a także klasa Pubmod.java, należących do pakietu PRO.JAVA.PKG003. Następnie przyniosę tylko zrzuty ekranu z tych klas i wynik programu:
Hej! W dzisiejszym wykładzie zapoznamy się z koncepcją " modyfikatory dostępu"I rozważ przykłady z nimi pracy. Chociaż słowo "zapoznał się" nie będzie całkiem poprawne: z większością z nich jesteś już znany z poprzednimi wykładami. Na wszelki wypadek, odświeżanie głównej rzeczy w pamięci. Modyfikatory dostępu - Są to najczęściej słowa kluczowe, które regulują poziom dostępu do różnych części kodu. Dlaczego "najczęściej"? Ponieważ jeden z nich jest domyślnie ustawiony i nie jest oznaczony przez kluczowe słowo :) W sumie Java ma cztery modyfikatory dostępu. Wymieniamy je w kolejności z surowego do najbardziej "miękkiej":
- prywatny;
- chroniony;
- domyślnie (pakiet widoczny);
- publiczny.
Prywatny modyfikator
![](https://i1.wp.com/javarush.ru/images/article/6a8c0181-8bbe-442e-b040-c74c62501986/1024.jpeg)
Chroniony modyfikator.
Następna surowość modyfikatora dostępu jest chroniona.![](https://i2.wp.com/javarush.ru/images/article/8d4b98ea-fbf8-4bd6-89ff-7447166ab7c7/1024.jpeg)
- w ramach wszystkich zajęć znajdujących się w tym samym pakiecie co nasz;
- w ramach wszystkich bohaterów spadkobierców naszej klasy.
Pakiet widoczny modyfikator
Ponadto nasza lista jest domyślnym modyfikatorem lub, jak jest również nazywany, widoczny pakiet. Nie jest oznaczony przez kluczowe słowo, ponieważ jest zainstalowany w domyślnym Javie dla wszystkich pól i metod. Jeśli piszesz w swoim kodzie - int x \u003d 10 ... Zmienna X będzie tym najbardziej widocznym dostępem. Pamiętaj, co to robi, łatwo. W rzeczywistości, domyślnie \u003d chronione -Nore :) Przypadki jego zastosowania są ograniczone, a także chroniony modyfikator. Najczęściej, domyślne środki są używane w pakiecie, gdzie istnieją pewne zajęcia użytkowe, które nie wdrażają funkcjonalności wszystkich innych klas w tym pakiecie. Daj nam przykład. Wyobraź sobie, że mamy pakiet " usługi." Wewnątrz znajdują się różne klasy, które pracują z bazą danych. Na przykład istnieje klasa Userservice, czytanie danych użytkownika z bazy danych, klasę Carservice, czytając z tej samej bazy danych samochodów i innych klas, z których każdy działa z jego typami obiektów i odczytuje dane o nich z podstawy. Usługi pakietów; Klasa publiczna Usługi pakietowe () Usługi pakietów; Klasa publiczna Carservice () Jednak sytuacja może się łatwo zdarzyć, gdy dane w bazie danych są w jednym formacie i potrzebujemy ich w innym. Wyobraź sobie, że data daty użytkownika w bazie danych jest przechowywana w znaczniku czasu z strefą czasową ... 2014 - 04 - 04 20: 32: 59.390583 + 02 ... Potrzebujemy najłatwiejszego obiektu - java.util.date. W tym celu możemy stworzyć w specjalnej klasie Mappera wewnątrz pakietu usług. Będzie odpowiedzialny za konwersję danych z podstawy w naszych zwykłych obiektach Java. Prosta klasa pomocnicza. Zwykle tworzymy wszystkie klasy, takie jak klasa publiczna, ale nie jest to konieczne. Możemy zadeklarować naszą klasę pomocniczą, podobnie jak klasa Mapper. W takim przypadku nadal robi swoją pracę, ale nie widać nikomu poza pakietem serwisowym! Usługi pakietów; Klasa Mapper () Usługi pakietów; Klasa publiczna Carservice (Mapper Mapper;), a to jest w rzeczywistości prawidłową logikę: dlaczego ktoś poza pakietem znajduje się klasa pomocnicza, działa tylko z klasami tego samego pakietu?Publiczny modyfikator
I ostatni na liście, ale nie znacząco - publiczny modyfikator! Z nim spotkałeś się w pierwszym dniu nauki na Jawonuszowi, najpierw w moim życiu prowadzącego publiczną statyczną void Główną (String Args).![](https://i1.wp.com/javarush.ru/images/article/4323b90c-193c-444c-88e4-cfd8af695107/1024.jpeg)
Język Java zapewnia wiele modyfikatorów podzielonych na następujące kategorie:
- dostęp do modyfikatora
- Modyfikator bez dostępu
Modyfikator służy do określenia klasy, metody lub zmiennej, z reguły, na przedniej krawędzi aplikacji. Poprzez następujący przykład dla ilustracji:
Klasa publiczna Nazwa klasy (// ...) Prywatne Boolean Myflag; Statyczne końcowe podwójne tygodnie \u003d 9,5; Chroniony statyczny końcowy Int Boxwidth \u003d 42; Publiczna statyczna pustka Główna (argumenty łańcuchowe) (// 方法 方法)
Modyfikator kontroli dostępu
Java, możesz użyć znaków kontroli dostępu, aby chronić dostęp do klas, zmiennych, metod i projektantów. Java obsługuje cztery różne prawa dostępu.
Domyślnie znany również jako wartość domyślna Widoczny w tym samym pakiecie, nie używaj żadnego modyfikatora.
Prywatny do wskazania prywatny Modyfikator widoczny w tej samej klasie.
W celu wskazania wspólny Modyfikator widoczny dla wszystkich klas.
Chroniony, B. chroniony Modyfikator określa, że \u200b\u200bdla wszystkich klas i podklasach w tym samym pakiecie widocznym.
Domyślny modyfikator dostępu - Nie używaj żadnych słów kluczowych
Użyj zmiennych i metod zadeklarowanych w domyślnym modyfikacji dostępu dla klasy w tym samym pakiecie jest widoczny. Interfejs, w którym zmienne są domyślnie zadeklarowane jako publiczne finały statyczne i interfejs, w którym domyślna metoda dostępu dla publiczności.
Aplikacja w poniższym przykładzie, zmienne i metody nie mogą używać żadnego modyfikatora.
Wersja string \u003d "1.5.1"; Processorium Boolean () (Zwrot true;)
Prywatny modyfikator dostępu -Private
Prywatny modyfikator dostępu jest najbardziej rygorystycznym poziomem dostępu, jest zadeklarowany zarówno prywatne metody, zmienne, jak i należy do klasy konstruktora, może być dostępny tylko, a klasy i interfejsy nie mogą być zadeklarowane.
Zmienne zadeklarowane jako prywatny typ dostępu mogą być dostępne tylko poza klasą przez klasę metody Heter publicznych.
Dostęp do prywatnego modyfikatora służy głównie do klasy ochrony szczegółów wdrażania i danych.
Następujące klasy korzystają z prywatnego modyfikatora dostępu:
Logger klasy publicznej (Prywatny format łańcucha; Public String Getformat () (RETURN ITS.Format;) Publiczny void SetFormat (format string) (format string)))
Przykład, zmienny format klasy rejestratora jest zmienną prywatną, dzięki czemu inne klasy nie mogą bezpośrednio odbierać i ustawić wartości zmiennej. Aby móc pracować z innej zmiennej klasy, określane są dwie metody otwarte: Getformat () (wartość zwracana) i SetFormat (ciąg) (ustawienie formatu)
Otwarty modyfikator dostępu -Pobric
Jest zadeklarowany jako zajęcia publiczne, metody, projektantów i interfejsy mogą być dowolnym innym typem dostępu.
Jeśli kilka wzajemnych wizyt zajęć publicznych w różnych opakowaniach, musisz zaimportować odpowiedni pakiet klasy publicznej, jest stale położony. Od dziedziczenia klas klasa wszystkich publicznie dostępnych metod i zmiennych może być dziedziczona przez jego podklasy.
Następujące funkcje wykorzystują publiczną kontrolę dostępu:
Publiczne statyczne void Główne (argumenty łańcuchowe) (// ...)
Główny program Java () musi być zainstalowany w miejscach publicznych, w przeciwnym razie tłumacz Java nie będzie w stanie uruchomić klasy.
Chronione modyfikatory dostępu
Jest zadeklarowany jako zmienne chronione, metody i konstruktory w tym samym pakiecie mogą być innym typem dostępu i mogą być dostępne w różnych pakietach podklasowych.
Chroniony modyfikator dostępu nie można zmienić klas i interfejsy, metody i zmienne członkowskie mogą być zadeklarowane zarówno chronione, ale metody członków interfejsu nie można zadeklarować chronionych.
podklasy modyfikujące mogą uzyskać dostęp do bezpiecznych metod i zmiennych, dzięki czemu możemy chronić niewiarygodne klasy przy użyciu tych metod i zmiennych.
Kolejna klasa macierzystego wykorzystuje bezpieczny modyfikator dostępu, podklasy zastępują metodę openSpeaker () klasy rodzicielskiej.
Klasa Audioplayer (Speaker Sp) (// 实现)) Klasa Streamingaudioplayer (Boolean Openspeaker (Speaker Sp) (// 实现 细节))
Jeśli metoda openSpeaker () jest zadeklarowana jako prywatna, a następnie oprócz klasy Audioplayer nie może uzyskać dostępu do metody. Jeśli openSpeaker () zostanie ogłoszony jako opinia publiczna, wszystkie zajęcia mają możliwość dostępu do metody. Jeśli chcemy, aby proces był widoczny dla podklasów klasy, metoda jest zadeklarowana jako chroniona.
Kontrola dostępu i dziedziczenie
Zwróć uwagę na następujące metody odziedziczone Reguły:
Klasa nadrzędna jest zadeklarowana jako metody publiczne w podklasie muszą być również publiczne.
Klasa nadrzędna jest zadeklarowana jako bezpieczna metoda w podklasie lub zadeklarowana jako chroniona lub ogłoszona publicznie. Nie możesz zostać zadeklarowany zamknięty.
Klasa nadrzędna jest deklarowana jako metoda prywatna nie może być dziedziczona.
Modyfikator bez dostępu
W celu osiągnięcia wielu innych funkcji Java zapewnia również wiele modyfikatorów bez dostępu.
modyfikator statyczny służy do tworzenia metod klasy i zmiennych klasy.
Końcowy modyfikator używany do dekoracji klas, metod i zmiennych, końcowej modyfikowanej klasy nie może być dziedzicona, zmodyfikowana metoda klasy nie może być dziedziczona nadpisanym, zmodyfikowaną zmienną stałą, nie można zmienić.
Streszczenie modyfikator służy do tworzenia lekcji abstrakcyjnych i abstrakcyjnych metod.
Modyfikatory synchroniczne i lotne, głównie do gwintów programowania.
Modyfikator statyczny.
Zmienne statyczne:
Statyczne Korzystanie ze słów kluczowych, aby zadeklarować zmienne statyczne, które nie zależą od obiektu, niezależnie od tego, ile obiektów instancji klasy jest tylko jedną kopię zmiennej statycznej. Zmienne statyczne są również znane jako zmienne klasy. Zmienne lokalne nie mogą być zadeklarowane jako zmienne statyczne.
Metody statyczne:
Słowo kluczowe statyczne służy do deklarowania obiektu nie zależy od metody statycznej. Metody statyczne nie mogą używać klasy zmiennej statycznej. Metoda statyczna, aby uzyskać dane z listy parametrów, a następnie obliczyć dane.
Dostęp do zmiennych klasy i metod może być używany bezpośrednio do klasy klasy.variablenename i dostęp do klasy.
W poniższym przykładzie stosuje się modyfikator statyczny do tworzenia metod klasy i zmiennych klasy.
Klasa publiczna InstanCounter (prywatna statyczna int Numinstancess \u003d 0; chronione statyczne int GetCounta () (powrót Numinstances;) Prywatne statyczne Void Addinstance () (Numinstances ++;) InstanceCounter () (instanceCounter.addinstance ();) Publiczna statyczna void Główna ( Argumenty łańcuchowe) (System.Out.println ("Począwszy od" + instanceCounter.getcount () + "Instances"); dla (int I \u003d 0; i< 500; ++i){ new InstanceCounter(); } System.out.println("Created " + InstanceCounter.getCount() + " instances"); } }
Przykłady powyższych wyników działania edycji w następujący sposób:
Rozpoczął się od 0 instancji utworzonych 500 instancji
Klasyfikator końcowy
Zmienne skończone:
Końcowe zmienne mogą być jawnie zainicjowane i zainicjowane tylko raz. Katalog jest zadeklarowany jako obiekty końcowe nie można określić innego obiektu. Ale ostateczny cel, w którym można zmienić dane. To najlepsze odniesienie do obiektu nie można zmienić, ale wartość można zmienić.
Końcowy modyfikator jest zwykle używany razem, aby utworzyć stałą stałą klasę modyfikatora.
Test klasy publicznej (ostateczna wartość \u003d 10; // 下面 是 声声 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的实例"; public void changeValue(){ value = 12; //将输出一个错误 } } !}
Metoda końcowa
Metody Klasa końcowa jest dziedziczona podklasami, ale nie może zmienić podklas.
Głównym celem metody jest zapobieganie ostatecznym oświadczeniu o tej metodzie zmienia się.
Jak pojawi się poniżej, stosując skończone metody modyfikatorów deklaracji.
Test klasy publicznej (Publiczna ostateczna Void ChangeName () (// 方法 方法))
Końska kategoria
Klasy końcowe nie mogą być dziedziczone, żadna klasa nie może dziedziczyć żadnej cechy klasy końcowej.
Publiczny test klasy końcowej (// 类类)
Abstrakcyjny modyfikator
Klasa abstrakcyjna:
Klasa abstrakcyjna nie może być używana do utworzenia instancji obiektu, jedynym celem aplikacji jest abstrakcyjna klasa dla przyszłej ekspansji tej klasy.
Klasa nie może zostać zmieniona abstrakcyjne i końcowe. Jeśli klasa zawiera abstrakcyjne metody, klasa musi zostać zadeklarowana jako abstrakcyjna klasa, w przeciwnym razie błąd kompilatora.
Klasa abstrakcyjna może zawierać abstrakcyjne metody, a nie abstrakcyjne metody.
Streszczenie podwójna cena; Prywatny model łańcucha; prywatny ciąg ciąg; publiczny streszczenie void Gofast (); // 抽象 publiczny streszczenie void void Changecolor ();)
Metoda abstrakcyjna
Żadna metoda nie jest abstrakcyjną realizacją sposobu, specyficznego wdrożenia metody podającej podklas. Streszczenie metody nie mogą być zadeklarowane jako ostateczne i ścisłe.
Każda podklasa dziedzicza klasę abstrakcyjną musi wdrożyć wszystkie abstrakcyjne metody klasy rodzicielskiej, jeśli podklasa nie jest abstrakcyjną klasą.
Jeśli klasa zawiera szereg abstrakcyjnych metod, klasa musi zostać zadeklarowana jako klasa abstrakcyjna. Klasa abstrakcyjna nie może zawierać abstrakcyjnych metod.
Abstrakcyjne ogłoszenie metody kończy się średnikiem, na przykład: publiczną abstrakcyjną próbką ();
Superklasa klasy publicznej abstrakcyjnej (streszczenie void m (); // 抽象 方法) Subklasa klasy rozszerza SuperClass (// 实现 抽象 方法 void m () (.........))
Synchroniczny modyfikator
Metoda Synchroniczne słowo kluczowe do deklaracji tego samego czasu tylko jeden dostęp do wątku. Synchroniczny modyfikator może być stosowany do czterech modyfikatorów dostępu.
Publiczne zsynchronizowane void showdetails () (.......)
Modyfikator przejścia.
Serializowany obiekt zawiera modyfikację zmiennej przejściowej instancji maszyny wirtualnej Java (JVM), aby pominąć tę specyficzną zmienną.
Modyfikator jest włączony w definicji zmiennych aplikacji do wstępnego przetwarzania danych i zmiennych.
Publiczny przejściowy limit \u003d 55; // nie będzie utrzymywać publicznego INT B; // będzie się utrzyma.
Lotnicze modyfikatory.
Zmienna zmienna członka lotny za każdym razem, gdy włączyć strumienie IT są zmuszone do ponownego przeczytania wartości zmiennej członka ze współdzielonej pamięci. Ponadto, gdy zmiany elementów zmiennych, strumień jest zmuszony do zmiany wartości jest rejestrowane w pamięci ogólnej. Więc w dowolnym momencie dwa różne tematy zawsze widzą tę samą wartość zmiennej członka.
Klasa publiczna MyRunNable Adlives Runnable (prywatne niestabilne boolean aktywne; publiczny pustynny bieg () (aktywny \u003d true; podczas gdy (aktywny) // 第一 (// 代码)) Publiczny utwardzacz () (aktywny \u003d false; // 第二 行))
W normalnych warunkach przepływ powoduje uruchomienie () uruchamianie (w wyrównanym otwartym strumieniu) w innym strumieniu połączenia, aby zatrzymać (). Jeśli wartość aktywna w pierwsza linia Bufor jest używany, w drugi rząd Gdy aktywny cykl jest fałszywy, nie zatrzymuje się.
Niemniej jednak powyższy kod, używamy zmodyfikowanego lotnego aktywnego, więc cykl zostanie zatrzymany.
Ostatnia aktualizacja: 04/20/2018
Wszyscy członkowie klasy w języku Java - pola i metody - mają modyfikatory dostępu. W poprzednich tematach spotkaliśmy już publiczny modyfikator. Modyfikatory dostępu umożliwiają ustawienie dopuszczalnego zakresu członków klasy, czyli kontekst, w którym można użyć tej zmiennej lub metody.
Java korzysta z następujących modyfikatorów dostępu:
publiczny: publiczny, publicznie dostępny członek klasy lub klasy. Pola i metody zadeklarowane z publicznym modyfikatorem są widoczne dla innych klas z bieżącego opakowania i zewnętrznych pakietów.
prywatny: zamknięty członek klasy lub klasy, przeciwieństwo modyfikatora publicznego. Zamknięta klasa lub członek klasy jest dostępny tylko z kodu w tej samej klasie.
chronione: Taka klasa lub członek klasy jest dostępny z dowolnego miejsca w bieżącej klasie lub opakowaniu lub w klasach pochodnych, nawet jeśli są w innych pakietach
Domyślny modyfikator. Brak modyfikatora w metodzie pola lub klasy obejmuje do niego domyślnego modyfikatora. Takie pola lub metody są widoczne dla wszystkich klas w bieżącym pakiecie.
Rozważ modyfikatory dostępu za pomocą przykładu następującego programu:
Program klasy publicznej (publiczne stwierdzające Void Główne (String Args) ("Kate", 32, "Baker Street", "+12334567"); Kate.displayName (); // Normy, metoda Kate Public. Displayage (); // NORMY Metoda ma domyślny modyfikator kate.displayphone (); // norma, metoda chronionego //kate.displayAddress (); //! Błąd, private System.out.println Metoda (Kate.name); // Norm , domyślny modyfikator System.Out.Println (Kate.Address); // Norm, System publiczny.Out.println Modyfikator (Kate.age); // Norma, modyfikator chroniony //system.Out.println (Kate.Phone); //! BŁĄD, PRYWATNY)) Osoba klasy (nazwa łańcucha; Protected Int Age; Publiczny adres string; Prywatny telefon strunowy; Osoba publiczna (Nazwa łańcucha, Int Wiek, adres string, Telefon string) (to. Nazwa \u003d Nazwa; to. Wiek \u003d wiek; ta.Address \u003d adres; this.Phone \u003d telefon;) publiczna void DisplayName () (System.out.printF ("Nazwa:% s", nazwa);) Unikam wyświetlanie () (System.Out .Printf ("Wiek:% d n", wiek);) Prywatne void D isplayAddress () (System.Out.printf ("Adres:% s", adres); ) Protection Void Dwupphone () (System.Out.printF ("Telefon:% S", Telefon);))
W tym przypadku obie klasy znajdują się w jednym pakiecie - domyślny pakiet, więc w klasie programu możemy korzystać z wszystkich metod i zmiennych klasy osoby, które mają modyfikator do zamieszkania, publicznego i chronionego. A pola i metody z prywatnym modyfikatorem w klasie programu nie będą dostępne.
Jeśli klasa programu byłaby w innym pakiecie, tylko pola i metody z publicznym modyfikatorem byłyby dla niego dostępne.
Modyfikator dostępu musi poprzedzać resztę definicji lub metody zmiennej.
Kapsułkowanie
Wydawałoby się, dlaczego nie zadeklarować wszystkich zmiennych i metod z publicznym modyfikatorem, aby były dostępne w dowolnym punkcie programu niezależnie od pakietu lub klasy? Weźmy na przykład dziedziniec wiekowy, który reprezentuje wiek. Jeśli inna klasa ma bezpośredni dostęp do tego pola, prawdopodobne jest, że w procesie programu będzie przesyłany nieprawidłową wartość, na przykład, negatywną liczbą. Ta zmiana danych nie jest pożądana. Albo chcemy, aby niektóre dane były warte bezpośrednio, aby mogły być wyświetlane na konsoli lub po prostu rozpoznać ich znaczenie. W tym względzie zaleca się ograniczenie dostępu do danych, jak to możliwe, aby chronić je przed niechcianym dostępem z zewnątrz (zarówno, aby uzyskać wartość, jak i zmiany). Zastosowanie różnych modyfikatorów zapewnia, że \u200b\u200bdane nie będą zniekształcone lub zmieniane nie jest prawidłowo zmienione. Podobne dane ukrywanie wewnątrz określonego obszaru widoczności nazywa się enkapsulacją.
Tak więc, z reguły zamiast bezpośredniego wykorzystania pól, z reguły, użyj metod dostępu. Na przykład:
Program klasy publicznej (String Args) (osoba Kate \u003d nowa osoba ("Kate", 30); System.out.println (Kate.getage ()); // 30 Kate.setage (33); System .Out.println ( Kate.getage ()); // 33 Kate.setage (123450); System.out.println (Kate.Getage ()); // 33)) Osoba klasy (prywatna nazwa ciągów; Prywatny wiek; osoba publiczna (ciąg Nazwa, Int Wiek) (nazwa_ nazwa \u003d ta.age \u003d Wiek;) Public String GetName () (Return ITE.Name;) Publiczna pusta nazwa (nazwa łańcucha) (ta nazwa) ) (RETURN ITS.AGE) Public Void Setage (jeśli wiek) (IF (wiek\u003e 0 && wiek< 110) this.age = age; } }
A następnie zamiast bezpośredniej operacji z polami imienia i pola wieku w klasie osoby, będziemy współpracować z metodami, które ustawiają i zwracamy wartości tych pól. SetName, metody konfiguracji są również nazywane Mutator, ponieważ zmieniają wartości pola. Oraz metody GetName, Getage i prawdopodobnie nazywany akcesorikiem, ponieważ dzięki ich pomocy otrzymujemy wartość pola.
W tych metodach możemy inwestować dodatkową logikę. Na przykład, w tym przypadku, gdy zmienisz wiek, jest on sprawdzany, jeśli ta nowa wartość odpowiada dopuszczalnym zakresie.
Ostatnia aktualizacja: 03.10.2019
Wszyscy członkowie klasy - pola, metody, właściwości - wszystkie mają modyfikatory dostępu. Modyfikatory dostępu umożliwiają ustawienie dopuszczalnego zakresu członków klasy. Oznacza to, że modyfikatory dostępu określają kontekst, w którym można użyć tej zmiennej lub metody. W poprzednich tematach, napotkaliśmy już ją, gdy ogłoszono pola klasy (czyli z publicznym modyfikatorem).
Następujące modyfikatory dostępu stosowane są w C #:
publiczny: publiczny, publicznie dostępny członek klasy lub klasy. Taka klasa jest dostępna z dowolnego miejsca w kodzie, a także z innych programów i zespołów.
prywatny: zamknięty członek klasy lub klasy. Reprezentuje całkowite przeciwieństwo publicznego modyfikatora. Taka zamknięta klasa lub członka klasy jest dostępny tylko z kodu w tej samej klasie lub kontekście.
chroniony: taki członek klasy jest dostępny z dowolnego miejsca w obecnej klasie lub w klasach pochodnych. W tym przypadku zajęcia pochodne mogą znajdować się w innych zgromadzeniach.
wewnętrzne: Członkowie klasy i klasy z podobnym modyfikatorem są dostępne z dowolnego kodu źródłowego w tym samym montażu, jednak nie jest dostępny dla innych programów i zespołów (jak w przypadku modyfikatora publicznego).
chroniony wewnętrzny: łączy funkcjonalność dwóch modyfikatorów. Zajęcia i członkowie klasy z takim modyfikatorem są dostępne z bieżącego zespołu i z klas pochodnych.
ochrona prywatna: Taki członek klasy jest dostępny z dowolnego miejsca w bieżącej klasie lub w zajęciach pochodnych, które są zdefiniowane w tym samym montażu.
Możemy wyraźnie ustawić modyfikator dostępu, na przykład:
Prywatny stan klasy chronionej (printed print () (Console.Writelina ($ "A \u003d (A)");)))
Lub nie możemy wskazać:
Stan klasy (int A; Void Print () (konsola.Writelina ($ "A \u003d (A)");))
Jeśli modyfikator dostępu nie jest zdefiniowany dla pól i metod, domyślny prywatny modyfikator jest dla nich używany.
Zajęcia i struktury zadeklarowane bez modyfikatora mają domyślny dostęp do wewnętrznego.
Wszystkie klasy i struktury określone bezpośrednio w przestrzeni nazw i nie są osadzone w innych klasach, mogą mieć tylko modyfikatory publiczne lub wewnętrzne.
Spójrzmy na przykład i utworzyć następujący stan klasy:
Stan klasy publicznej (// wciąż to prywatne w defaultvar; int Defaultvar; // Pole jest dostępne tylko z bieżącej klasy prywatnej int Privatevar; // dostępne z bieżącej klasy i klasy pochodnej, które są zdefiniowane w tym samym projekcie chronionym prywatnym int ProtectedPrivatevar; // Dostępne z bieżącej klasy i pochodnych chroniony Int protectedvar; // Dostępny w dowolnym miejscu w bieżącym projekcie wewnętrznym INT INTERNVAR; // Dostępny w dowolnym miejscu w bieżącym projekcie i z klas spadkobiercy w innych projektach chronionych wewnętrznym Int Protectedinternalvar; // Dostępne w dowolnym miejscu programu, a także dla innych programów i buduje publiczne INT Publicvar; // domyślnie domyślnie, Prywatny domyślnyMethod () \u003d\u003e Console.WriteLine Modyfikator () \u003d\u003e Console.Writelinine ($ "DefaultVar \u003d ( Defaultvar) "); // Metoda jest dostępna tylko z bieżącej klasy Prywatna void Privatemethod () \u003d\u003e Console.Writelinine ($ Privatevar \u003d (Privatevar)); // Dostępny z bieżącej klasy i klasy pochodnych, które są zdefiniowane w tym samym miejscu ROSEKT PROTECTED Private Void ProtectedPrivatemethod () \u003d\u003e Console.Writeline ($ ProtectedPrivatevar \u003d (protectedPrivatevar) "); // Dostępne z bieżącej klasy i pochodne chronione ProtectedMethod () \u003d\u003e konsola.WRITELINE ($ "Protectedvar \u003d (protectedvar)"); // Dostępny w dowolnym miejscu w bieżącym projekcie wewnętrznym wewnętrznym healtmethod () \u003d\u003e konsola.WRITELINE ($ "INTERNALVAR \u003d (INTERNATVAR)"); // Dostępny w dowolnym miejscu w bieżącym projekcie i z klas spadkobierców w innych projektach chronionych wewnętrznym void Protectedinternternaldod () \u003d\u003e Console.WRITELINE ($ Protectedinternalvar \u003d (Protectedinternalvar) "); // Dostępny w dowolnym miejscu w programie, a także dla innych programów i buduje publiczną void publicmethod () \u003d\u003e Console.Writelinine ($ "publicvar \u003d (publicvar)"); )
Ponieważ klasa państwowa jest zadeklarowana z publicznym modyfikatorem, będzie dostępna z dowolnego miejsca programu, a także z innych programów i zespołów. Klasa stanu ma pięć pól dla każdego poziomu dostępu. Plus jedna zmienna bez modyfikatora, który jest domyślnie zamknięty (prywatny).
Istnieją również sześć metod, które wyświetli wartości pola klasy na ekranie. Zauważ, że ponieważ wszystkie modyfikatory umożliwiają użytkowanie członków klasy w ramach tej klasy, a następnie wszystkie zmienne klasowe, w tym zamknięte, są dostępne dla wszystkich jego metod, ponieważ wszyscy są w kontekście klasy klasy.
Teraz zobaczmy, jak możemy użyć zmiennych naszej klasy w programie (czyli w głównej klasie klasy programu), jeśli klasy stanowe i programowe są w jednym projekcie:
PROGRAM KLASY (STATIC VOIDE1 \u003d Nowy stan (); // Przypisz wartość zmiennej DefaultVar, nie będziemy pracować, //, ponieważ ma prywatny modyfikator, a klasa programów nie widzi go //, a to środowisko łańcuchowe podkreśli jako błędny stan1.defaultvar \u003d 5; // błąd, dostęp nie może // to samo dotyczy pliku prywatnego ".privatevar \u003d 5; // błąd, nie może być dostępny // przypisanie wartości zmiennej ProtectedPrivatevar nie będzie działać, // Ponieważ klasa programu nie jest klasy stanu klasy-heir state1.ProtectedPrivatevar \u003d 5; // błąd, nie może być dostępny // Przypisywanie wartości zmiennej Protectedvar nie będzie działać, // ponieważ klasa programu nie jest Class-Heir State State1.Protectedvar \u003d 5; // błąd, nie może być dostępny // Zmienna Wewnętrzna z modyfikatorem wewnętrznym jest dostępna z dowolnego miejsca w bieżącym projekcie // Dlatego cicho przypisujemy go wartość stanu1. Wewnętrzna \u003d 5; // Zmienna Protectedinternalvar jest również dostępna z dowolnego miejsca bieżącego projektu State1.Protectedinternalvar \u003d 5; // Variable Publicvar Publicznie Dostępne Państwo1.Publicvar \u003d 5; ))
Tak więc udało nam się zainstalować tylko zmienne Wewnętrzne, Protectedinternalvar i Publicvar, ponieważ ich modyfikatory umożliwiają korzystanie z tego kontekstu.
Sytuacja jest podobna i metodami:
Program klasy (statyczny VOIDE1 \u003d Nowy stan (); State1.DefaultMethod (); // Błąd, dostęp nie może być dostępny przez stan1.Privatemethod (); // błąd, dostęp nie może być akceptowany UWAGA1.ProtectedPrivatemethod (); // błąd, Dostęp nie może być dostępny State1.ProtectedMethod (); // błąd, dostęp nie może być dostępny State1.Internalmethod (); // NORMS STAND1.Protectedinternalmetod (); // State1.Publicmethod () Norma;
Tutaj mamy również dostęp do tylko trzech metod: WewnętrznyMethod, Protectedinternalmethod, Publicmethod, które są dostępne, zgodnie z wewnętrznymi modyfikatorami, chronionymi wewnętrznymi, publicznymi.
Dzięki takiemu systemowi modyfikatorów dostępu można ukryć kilka punktów klasy z innych części programu.
Pomimo faktu, że modyfikatory publiczne i wewnętrzne są podobne w swoich działaniach, ale mają wielką różnicę. Członkowie klasy i klasy z publicznym modyfikatorem będą również dostępne dla innych programów, jeśli dane są dokonywane w bibliotece DLL DILDIC, a następnie użyj go w tych programach.