Menu
Jest wolny
Zameldować się
główny  /  Rada / Modyfikatory poziomu dostępu. Modyfikatory dostępu

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.
Spójrzmy na każdego z nich, zdefiniujemy, kiedy będą mogli przyjść w poręce i podać przykłady :)

Prywatny modyfikator


Prywatny jest najbardziej ścisłym modyfikatorem dostępu. Ogranicza widoczność danych i metod granic jednej klasy. Ten modyfikator jest znany z wykładu o Getter i Setters. Pamiętasz ten przykład? KOŚCIA KLASA PUBLICZNA (Publiczna nazwa łańcucha; Wiek publiczny Int; Waga publiczna INTE; Public Cat (Nazwa łańcucha, Age, Int Waga) (to. Imię \u003d Nazwa; to. Wiek \u003d wiek; to. Waga \u003d waga;) Kot publiczny () () Publiczny void Saymeów () (system. Out. Println ("Meow!");)) Klasa publiczna Główna (String Args) (Cat Cat \u003d New Cat (); Kot. Imię \u003d ""; Kot. Wiek \u003d - 1000; Cat. Waga \u003d 0;)) Uznaliśmy go w jednym z artykułów wcześniej. Tutaj zrobiliśmy poważny błąd: odkrył nasze dane, w wyniku czego programowani koledzy zyskali dostęp bezpośrednio do pola klasy i zmienić ich wartość. Ponadto wartości te zostały przypisane bez kontroli, dzięki czemu w naszym programie możesz utworzyć kota z wiekiem -1000 lat, nazwa "" i ważenie 0. Aby rozwiązać ten problem, użyliśmy getter i osadnicy.Również ograniczony dostęp do danych przy użyciu prywatnego modyfikatora. KOT KLASA PUBLICZNA (Prywatna nazwa łańcucha; Prywatny wiek Int; prywatna waga INT; Kot publiczny (nazwa łańcucha, Int wiek, INT Waga) (to. Imię \u003d Nazwa; to. Wiek \u003d wiek; to. Waga \u003d waga;) Kot publiczny () () Publiczny void Saymeów () (system. Out. Println ("Meow!");) Public String GetName () (Nazwa zwrotu;) Public Void SetName (nazwa łańcucha) (to. Nazwa \u003d nazwa;) publiczne int Getage () (wiek powrotu;) publiczna domkuna (Ant wiek) (to. Wiek \u003d Wiek;) Public Int GetWeight () (Waga zwrotna;) Publiczna wersja bezważna (int Waga) (to. waga \u003d waga;)), Ograniczanie dostępu do pól i wdrażanie osadników jest najczęstszym przykładem korzystania z prywatnego w prawdziwej pracy. To znaczy wdrożenie enkapsulacji w programie jest głównym celem tego modyfikatora. Dotyczy to nim nie tylko na polach. Wyobraź sobie, że w twoim programie jest metoda, która implementuje bardzo złożoną funkcjonalność. Aby wymyślić to na przykład ... Powiedzmy, metodę readdatafromcolder () przybiera adres wejściowy z danymi, odczytuje dane z dużego zderzaka Hadron w formacie bajtów, konwertuje te dane do tekstu, pisze do pliku i drukuje go. Nawet opis sposobu wygląda pilnie, co powiedzieć o Kodeksie :) Aby zwiększyć czytelność kodu, nie byłoby dobrze nie napisać kompleksowej logiki metody w jednym miejscu, ale wręcz przeciwnie - złamanie funkcjonalność do poszczególnych metod. Na przykład metoda READBYEDATA () jest odpowiedzialna za czytanie danych, ConvertByTestosymbols () konwertuje dane z kolbidu do tekstu, SavetOFILE () zapisuje wynikowy tekst do pliku, a drukował nasz plik z danymi. Readdatafromcolder () Metoda w końcu byłaby znacznie prostsza: Klasa publiczna Colilaberutil (Public Void Readdatafromcolder (Pathtodata) (Bajt ColderData \u003d Readbytedatata (Pathtodata); String TextData \u003d ConvertBytestosymbols (ColderData); Plik FireWitTata \u003d Savetofile (TextData); PrintColderData filewithdata);) Bajt publiczny Readbytedata (Pathtodata) ( // Odczytuje dane w bajtach ) ConvertBYTBYTESTOSymbols (bajt ColliderDatainbytes) () Publiczny plik Savetofile (String ColdiderData) () Publiczny Void PrintColderData (plik FireWithololderData) ( // Drukuje dane z pliku )) Jednakże, jak pamiętasz z wykładu na interfejsach, użytkownik otrzymuje dostęp tylko do interfejsu końcowego. A nasze 4 metody nie są częścią tego. Oni są pomocniczy: Stworzyliśmy je, aby poprawić czytelność kodu i nie przyklejamy cztery różnych zadań w jednej metodzie. Nie musisz uzyskać dostępu do użytkownika do tych metod. Jeśli użytkownik podczas pracy z kolbidzeniem pojawi się dostęp do metody ConvertByTestosymbols (), najprawdopodobniej nie zrozumieć, jakiego rodzaju metody jest to konieczne. Jakie bajty są konwertowane? Skąd oni przyszli? Po co ich konwertować do tekstu? Logika wykonywana w tej metodzie nie jest częścią interfejsu użytkownika. Tylko metoda Readdatafromcollow () jest częścią interfejsu. Co zrobić z tymi czterema "wewnętrznymi" metodami? Dobrze! Ogranicz dostęp do prywatnego modyfikatora. Będą więc w stanie spokojnie wykonywać swoją pracę w klasie i nie wprowadzać w błąd użytkownika, do kogo logika każdego z nich jest potrzebna oddzielnie. Klasa publiczna ColideluLUTIL (Public Void Readdatafromcolder (Path Pathtodata) (Bajt Colderdata \u003d Readbytedata (Pathtodata); String TextData \u003d ConvertBytestosymbols (ColdiderData); Plik FireWithdata \u003d Savetofile (TextData); // Odczytuje dane w bajtach ) ConvertByTosymbols (bajt ColliderDatainbytes) ( // Konwertuj bajty do znaków ) Prywatny plik Savetofile (String ColderData) ( // Zapisuje odczytane dane do pliku ) Prywatne Void PrintColderData (plik FireWithololderData) ( // Drukuje dane z pliku } }

Chroniony modyfikator.

Następna surowość modyfikatora dostępu jest chroniona.
Pole i metody wskazane przez chroniony modyfikator dostępu będą widoczne:
  • w ramach wszystkich zajęć znajdujących się w tym samym pakiecie co nasz;
  • w ramach wszystkich bohaterów spadkobierców naszej klasy.
Trudno sobie wyobrazić, kiedy będzie potrzebować. Nie bądź zaskoczony: Zastosowania chronione jest znacznie mniej niż prywatne i są specyficzne. Wyobraź sobie, że mamy abstrakcyjną klasę abstrakcyjną, oznaczając tajny agent jakiejś specjalnych usług, a także pakiet TOP_Secret, który leży tej klasy i jej spadkobiercy. Specyficzne zajęcia są odziedziczone od niego - FBISecretagent, Mi6Secretagent, Mossadsecretagent itp. Wewnątrz klasy abstrakcyjnej chcemy zaimplementować licznik agenta. Podczas tworzenia gdzieś w programie nowego agenta obiektu wzrośnie. Pakiet top_secret; Publiczna klasy abstrakcyjna AbstractSectorTagent (publiczne statyczne int AgentCount \u003d 0;) Ale agenci są tajemnicą! Więc powinni wiedzieć o nich tylko i nikt inny. Możemy łatwo dodać chroniony modyfikator do pola AgentCount, a następnie obiekty innej klasy tajnych agentów będą mogły uzyskać jego znaczenie lub te klasy, które znajdują się w naszym "tajnym" pakiecie TOP_Secret. Publiczna klasy abstrakcyjna abstrakt_pletgent (chroniony statyczny int AgentCount \u003d 0;) tutaj dla takich konkretnych zadań i chronionych modyfikatorów :)

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).
Teraz, kiedy dowiedziałeś się wykładów na interfejsach, jest to oczywiste dla Ciebie do celu :) W końcu publiczność ma na celu coś dla użytkowników. Na przykład interfejs programu. Załóżmy, że napisałeś tłumacz programowy, a ona wie, jak przetłumaczyć rosyjski tekst w języku angielskim. Stworzyłeś metodę Tłumacz (łańcuchową), w ramach której implementowana jest niezbędna logika. Ta metoda zauważyła wiadomość publiczną, a teraz będzie częścią interfejsu: Tłumacz klasa publiczna (strunowy Tekstynrusian) ( // tłumaczy tekst z rosyjskiego do angielskiego )) Możesz podłączyć połączenie do tej metody za pomocą przycisku "Przekłada" na ekranie programu - i to jest! Każdy może go użyć. Części kodu oznaczonego przez publicznego modyfikatora są przeznaczone dla użytkownika końcowego. Jeśli podasz przykład od życia, prywatne jest wszystkie procesy występujące w telewizorze, gdy działa, a publiczność jest przyciski w telewizorze, z którym użytkownik może ich zarządzać. Jednocześnie nie musi wiedzieć, jak rozmieszczony telewizor i z powodu którego działa. Pilot jest zestawem ustawień publicznych: ON (), OFF (), Nextchannel (), Poprzednichanel (), Increasevolume (), Dereasevolume () itp.

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.