Modifikatori razine pristupa java. Vidljivost. specifikacije pristupa. Modifikator otvorenog pristupa -javno

Jezik Java nudi mnoge modifikatore podijeljene u sljedeće kategorije:

  • modifikator pristupa
  • Modifikator bez pristupa

Modifikator se koristi za definiranje klase, metode ili varijable, obično na čelu izjave. Kroz sljedeći primjer za ilustraciju:

javna klasa className ( // ... ) private boolean myFlag; statički završni dvotjedni = 9,5; zaštićeni statički konačni int BOXWIDTH = 42; public static void main (argumenti niza) ( // 方法体)

Modifikator kontrole pristupa

Java, možete koristiti znakove za kontrolu pristupa za zaštitu pristupa klasama, varijablama, metodama i konstruktorima. Java podržava četiri različite dozvole.

Zadano, također poznato kao zadano prema zadanim postavkama, vidljivo u istom paketu, nemojte koristiti modifikator.

Privatno do navedenog privatni modifikator vidljiv unutar iste klase.

Da, da naznačim Općenito modifikator vidljiv svim klasama.

zaštićeno, u zaštićen modifikator specificira da su sve klase i podklase unutar istog paketa vidljive.

Zadani modifikator pristupa - nemojte koristiti ključne riječi

Koristite varijable i metode deklarirane u zadanom modifikatoru pristupa za klasu unutar istog vidljivog paketa. Sučelje u kojem su varijable implicitno deklarirane kao javno statičko finale i sučelje gdje je zadana metoda pristupa javna.

Izjava u sljedećem primjeru, varijable i metode ne mogu koristiti nikakav modifikator.

Verzija niza = "1.5.1"; boolean processOrder() (vrati true;)

Modifikator privatnog pristupa -privatno

Modifikator privatnog pristupa je najrestriktivnija razina pristupa, deklariran je kao privatne metode, varijable i pripada klasi konstruktora, kojem se može pristupiti, ali se klase i sučelja ne mogu proglasiti privatnim.

Varijablama deklariranim kao privatni tip pristupa može se pristupiti samo izvan klase putem javne metode dobivanja klase.

Modifikator privatnog pristupa prvenstveno se koristi za zaštitu detalja implementacije i podataka iza klase.

Sljedeće klase koriste modifikator privatnog pristupa:

Public class Logger (privatni string format; javni string getFormat() (vrati this.format;) public void setFormat(String format) ( this.format = format; ))

Na primjer, format varijable klase Logger je privatna varijabla, tako da druge klase ne mogu izravno dobiti i postaviti vrijednost varijable. Da biste mogli raditi s drugom varijablom klase, definiraju se dvije javne metode: GetFormat() (format povratne vrijednosti) i SetFormat(String) (postavka formata)

Modifikator otvorenog pristupa -javno

Deklariran je kao javne klase, metode, konstruktori i sučelja mogu biti bilo koja druga vrsta pristupa.

Ako su višestruki međusobni posjeti javnih klasa u različitim paketima, morate uvesti odgovarajući paket javne klase koji se trajno nalazi. Zbog nasljeđivanja klasa, klasa svih javnih metoda i varijabli može biti naslijeđena svojim podklasama.

Sljedeće značajke koriste kontrolu javnog pristupa:

Javni statički void main(String argumenti) ( // ... )

Glavna metoda Java programa () mora biti postavljena javno, inače Java interpreter neće moći pokrenuti klasu.

Zaštićeni modifikatori pristupa zaštićeni

Deklarirane kao zaštićene varijable, metode i konstruktori u istom paketu mogu biti bilo koje druge vrste pristupa i mogu im se pristupiti u različitim paketima po podklasama.

Zaštićeni modifikator pristupa ne može se mijenjati klasama i sučeljima, metode i varijable članova mogu se proglasiti zaštićenima, ali varijable i metode članova sučelja ne mogu se deklarirati zaštićenima.

modifikator Podklase mogu pristupiti deklariranim zaštićenim metodama i varijablama, tako da možemo zaštititi nepovezane klase korištenjem ovih metoda i varijabli.

Sljedeća roditeljska klasa koristi zaštićeni modifikator pristupa koji podklase nadjačavaju metodu openSpeaker() roditeljske klase.

Class AudioPlayer ( zaštićeni boolean openSpeaker(Speaker sp) ( // 实现细节 ) ) klasa StreamingAudioPlayer ( boolean openSpeaker(Speaker sp) ( // 实现细节 ))

Ako je metoda openSpeaker() deklarirana privatnom, tada osim klase AudioPlayer, ne može pristupiti metodi. Ako je openSpeaker() deklariran kao javni, tada sve klase imaju mogućnost pristupa metodi. Ako želimo proces učiniti vidljivim za podklase klase, tada se metoda proglašava zaštićenom.

Kontrola pristupa i nasljeđivanje

Imajte na umu da sljedeće metode imaju naslijeđena pravila:

    Roditeljska klasa deklarirana kao javne metode u potklasi također mora biti javna.

    Roditelj klase je deklariran kao zaštićena metoda u potklasi, ili deklariran kao zaštićen ili javno deklariran. Ne možete biti proglašeni privatnim.

    Roditeljska klasa deklarirana kao privatna metoda ne može se naslijediti.

Modifikator bez pristupa

Kako bi se postigla niz drugih značajki, Java također nudi brojne modifikatore bez pristupa.

statički modifikator se koristi za kreiranje metoda klase i varijabli klase.

Konačni modifikator koji se koristi za ukrašavanje klasa, metoda i varijabli, konačna modificirana klasa ne može se naslijediti, modificirana metoda klase ne može se naslijediti, nadjačati, modificirane konstantne varijable se ne mogu mijenjati.

Apstraktni modifikator se koristi za stvaranje apstraktnih klasa i apstraktnih metoda.

Sinkroni i promjenjivi modifikatori, uglavnom za tijekove programiranja.

Statični modifikator

    Statičke varijable:

    Ključna riječ static koristi se za deklariranje statičkih varijabli koje ne ovise o objektu, bez obzira na broj objekata instance klase, to je samo jedna kopija statičke varijable. Statičke varijable poznate su i kao varijable klase. Lokalne varijable ne mogu se deklarirati kao statičke varijable.

    Statičke metode:

    Ključna riječ static koristi se za deklariranje objekta neovisnog o statičkoj metodi. Statičke metode ne mogu koristiti nestatičku klasu varijable. Statička metoda za dobivanje podataka s popisa parametara i zatim izračunavanje podataka.

Pristup varijablama i metodama klase može se koristiti izravno s pristupom classname.variablename i classname.methodname.

U sljedećem primjeru, statički se modifikator koristi za kreiranje metoda klase i varijabli klase.

Javna klasa InstanceCounter (privatni statički int numInstances = 0; zaštićeni statički int getCount() (vrati numInstances; ) privatni statički void addInstance() (numInstances++; )InstanceCounter() (InstanceCounter.addInstance(); ) javni statički argument void main() ) ( System.out.println("Počevši od " + InstanceCounter.getCount() + " instance"); for (int i = 0; i< 500; ++i){ new InstanceCounter(); } System.out.println("Created " + InstanceCounter.getCount() + " instances"); } }

Primjeri gore navedenih rezultata operacije uređivanja kako slijedi:

Počelo s 0 instanci Stvoreno 500 instanci

Ultimativni klasifikator

Konačne varijable:

Konačne varijable mogu se eksplicitno inicijalizirati i inicijaliziraju se samo jednom. Direktorij je deklariran jer lisni objekti ne mogu upućivati ​​na drugi objekt. Ali krajnji cilj je gdje se podaci mogu mijenjati. Ovo je konačna referenca na objekt koji se ne može promijeniti, ali čija se vrijednost može promijeniti.

Finalni modifikator se obično koristi zajedno za stvaranje konstante klase statičkih modifikatora.

Test javne klase (konačna vrijednost int = 10; // 下面是声明常量的实例 public static final int BOXWIDTH = 6; statički konačni String TITLE = "(!LANG:Manager"; public void changeValue(){ value = 12; //将输出一个错误 } } !}

Konačna metoda

Metode odredišne ​​klase nasljeđuju podklase, ali ih podklase ne mogu mijenjati.

Glavna svrha metode je spriječiti promjenu konačne izjave metode.

Kao što će biti prikazano u nastavku, korištenjem krajnjih metoda modifikatora deklaracije.

Test javne klase (javni konačni void changeName()( // 方法体 ))

završna kategorija

Završne klase ne mogu se naslijediti, niti jedna klasa ne može naslijediti nijednu od karakteristika finalne klase.

Javni završni ispit ( // 类体 )

Apstraktni modifikator

Sažetak razred:

Apstraktna klasa ne može se koristiti za instanciranje objekta, jedina svrha izjave je apstrahirati klasu za buduće proširenje te klase.

Sat se ne može mijenjati apstraktno i konačno. Ako klasa sadrži apstraktne metode, klasa mora biti deklarirana kao apstraktna klasa, inače je greška prevoditelja.

Apstraktna klasa može sadržavati apstraktne metode i neapstraktne metode.

Apstraktna klasa Caravan (privatna dvostruka cijena; privatni model stringa; privatna godina niza; javni apstraktni void goFast(); //抽象方法 javni apstraktni void changeColor(); )

Apstraktna metoda

Nijedna metoda nije implementacija apstraktne metode, konkretna implementacija metode koju osiguravaju podklase. Apstraktne metode ne mogu se deklarirati kao konačne i stroge.

Svaka podklasa koja nasljeđuje apstraktnu klasu mora implementirati sve apstraktne metode roditeljske klase, osim ako podklasa nije apstraktna klasa.

Ako klasa sadrži više apstraktnih metoda, klasa mora biti deklarirana kao apstraktna klasa. Apstraktna klasa ne može sadržavati apstraktne metode.

Deklaracija apstraktne metode završava točkom-zarezom, na primjer: javni apstraktni uzorak ();

Javna apstraktna klasa SuperClass( apstraktna void m(); //抽象方法) klasa SubClass proširuje SuperClass( //实现抽象方法 void m()( ......... ) )

Sinkroni modifikator

Metoda sinkrone ključne riječi za deklariranje pristupa samo jednoj niti u isto vrijeme. Sinkroni modifikator može se primijeniti na četiri modifikatora pristupa.

javni sinkronizirani void showDetails()( ....... )

Modifikator prijelaza

Serijski objekt sadrži prolazne varijable instance Java Virtual Machine (JVM) modificirane da preskaču tu određenu varijablu.

Modifikator je uključen u definiciju varijabli izraza za prethodnu obradu klasa tipova podataka i varijabli.

javni prijelazni int limit = 55; // neće ustrajati public int b; // će ustrajati

Nestabilni modifikatori

Nestalna modificirana varijabla člana svaki put kada joj se pristupi, niti su prisiljene ponovno pročitati vrijednost varijable člana iz dijeljene memorije. Također, kada se varijable člana promijene, nit je prisiljena promijeniti vrijednost zapisanu natrag u zajedničku memoriju. Dakle, u svakom trenutku, dvije različite niti uvijek vide istu vrijednost varijable člana.

Javna klasa MyRunnable implementira Runnable (privatni volatile boolean aktivan; javni void run() (aktivan = istinit; dok (aktivan) // 第一行 ( // 代码 )) public void stop() (aktivan = false; // 第二行))

U normalnim okolnostima, nit poziva metodu Run () (u Runnable otvorene niti) u drugoj niti poziva stop () metodu. Ako je aktivna vrijednost u prvi red koristi se pufer drugi red kada je aktivna petlja lažna ne prestaje.

Međutim, u gornjem kodu koristimo modificirani volatile aktivan tako da će se petlja zaustaviti.

Koje dodajete tijekom inicijalizacije za promjenu vrijednosti. Jezik Java ima širok raspon modifikatora, a glavni su:

  • modifikatori pristupa;
  • modifikatori klase, metode, varijable i niti koji se ne koriste za pristup.

Da biste koristili modifikator u Javi, morate uključiti njegovu ključnu riječ u definiciju klase, metode ili varijable. Modifikator mora biti ispred ostatka operatora, kao što je prikazano u sljedećim primjerima:

javna klasa className ( // ... ) private boolean myFlag; statički završni dvotjedni = 9,5; zaštićeni statički konačni int BOXWIDTH = 42; public static void main (String argumenti) ( // tijelo metode)

Modifikatori pristupa

Java pruža niz modifikatora pristupa za postavljanje razina pristupa za klase, varijable, metode i konstruktore. Postoje četiri pristupa:

  • Vidljivo u paketu (zadano i nije potreban modifikator).
  • Vidljivo samo razredu (privatno).
  • Vidljivo svima (javno).
  • Vidljivo paketu i svim podklasama (zaštićeno).

Zadani modifikator pristupa - bez ključne riječi

Zadani modifikator pristupa- znači da ne deklariramo eksplicitno modifikator pristupa u Javi za klasu, polje, metodu itd.

Varijabla ili metoda deklarirana bez modifikatora kontrole pristupa dostupna je bilo kojoj drugoj klasi u istom paketu. Polja u sučelju su implicitno javna, statična, konačna, a metode u sučelju su prema zadanim postavkama javne.

Primjer

Varijable i metode mogu se deklarirati u Javi bez ikakvih modifikatora, kao što je prikazano u sljedećem primjeru:

Verzija niza = "1.5.1"; boolean processOrder() (vrati true;)

modifikator privatnog pristupa

privatni modifikator- Metodama, varijablama i konstruktorima koji su deklarirani privatnim u Javi može se pristupiti samo unutar same deklarirane klase.

Modifikator privatnog pristupa je najrestriktivnija razina pristupa. Klasa i sučelja ne mogu biti privatni.

Varijablama koje su deklarirane kao privatne može se pristupiti izvan klase ako su javne metode koje ih primaju prisutne u klasi (pogledajte primjer i objašnjenje u nastavku).

Korištenje privatnog modifikatora u Javi glavni je način skrivanja podataka.

Primjer

Sljedeća klasa koristi privatnu kontrolu pristupa:

Public class Logger (privatni string format; javni string getFormat() (vrati this.format;) public void setFormat(String format) ( this.format = format; ))

Ovdje varijabla format razreda drvosječa je privatan, tako da ne postoji način da druge klase dohvate i postave njegovu vrijednost izravno.

Dakle, kako bismo ovu varijablu učinili dostupnom svima, definirali smo dvije javne metode: getFormat(), koji vraća vrijednost format, I setFormat(String), koji postavlja njegovu vrijednost.

modifikator javnog pristupa

javni modifikator- klasa, metoda, konstruktor, sučelje itd. deklarirano kao javno može se pristupiti iz bilo koje druge klase. Stoga se poljima, metodama, blokovima deklariranim unutar javne klase može pristupiti iz bilo koje klase koja pripada "svemiru" Jave.

Međutim, ako pokušavamo pristupiti javnoj klasi u drugom paketu, onda javna klasa mora biti uvezena.

Zahvaljujući nasljeđivanju klasa, u Javi sve javne metode i varijable klase nasljeđuju njene podklase.

Primjer

Sljedeća funkcija koristi kontrolu javnog pristupa:

Javni statički void main(String argumenti) ( // ... )

Metoda glavni() mora biti javna. Inače, ne može se pozvati iz java interpretera za pokretanje klase.

modifikator zaštićenog pristupa

zaštićeni modifikator- Varijablama, metodama i konstruktorima koji su deklarirani zaštićenima u superklasi mogu pristupiti samo podklase u drugom paketu ili bilo koja klasa u paketu zaštićene klase.

Modifikator zaštićenog pristupa u Javi ne može se primijeniti na klase i sučelja. Metode i polja mogu se proglasiti zaštićenima, ali se metode i polja u sučelju ne mogu proglasiti zaštićenima.

Zaštićeni pristup daje podklasi mogućnost korištenja pomoćne metode ili varijable, sprječavajući nepovezanu klasu da je pokuša koristiti.

Primjer

Sljedeća roditeljska klasa koristi zaštićenu kontrolu pristupa tako da njezina podređena klasa nadjača metodu openSpeaker():

Class AudioPlayer ( zaštićeni boolean openSpeaker(Speaker sp) ( // detalji implementacije) ) klasa StreamingAudioPlayer ( boolean openSpeaker(Speaker sp) ( // detalji implementacije))

Međutim, ako definiramo metodu openSpeaker() kao zaštićen, neće biti dostupan ni iz jedne klase osim AudioPlayera. Ako ga definiramo kao javnog, tada će postati dostupan svima. Ali naša je namjera ovu metodu izložiti samo podklasi, zbog čega smo koristili zaštićeni modifikator.

Kontrola pristupa i pravila nasljeđivanja

Sljedeća pravila u Javi primjenjuju se na naslijeđene metode:

  • Metode deklarirane kao javne u nadklasi također moraju biti javne u svim potklasama.
  • Metode deklarirane zaštićenima u superklasi moraju biti ili zaštićene ili javne u potklasama; ne mogu biti privatni.
  • Metode deklarirane kao privatne ne nasljeđuju svi, pa za njih ne postoji pravilo.

Modifikatori klase, metode, varijable i niti se ne koriste za pristup

Java pruža niz modifikatora ne za pristup, već za implementaciju mnogih drugih funkcionalnosti:

  • modifikator statički koristi se za stvaranje metoda i varijabli klase;
  • modifikator konačni koristi se za dovršenje implementacije klasa, metoda i varijabli;
  • modifikator sažetak potrebno za stvaranje apstraktnih klasa i metoda;
  • modifikatorima sinkronizirano I nestalan koriste se u Javi za niti.

statički modifikator

statički modifikator- koristi se za kreiranje metoda i varijabli klase.

statičke varijable

Ključna riječ static koristi se za stvaranje varijabli koje će postojati neovisno o bilo kojoj instanci stvorenoj za klasu. U Javi postoji samo jedna kopija statičke varijable, bez obzira na broj instanci klase.

Statičke varijable poznate su i kao varijable klase. U Javi se lokalne varijable ne mogu proglasiti statičkim.

statičke metode

Ključna riječ static koristi se za stvaranje metoda koje će postojati neovisno o bilo kojoj instanci stvorenoj za klasu.

U Javi, statičke ili statičke metode ne koriste nikakve varijable instance nijednog objekta klase, one su definirane. Statičke metode uzimaju sve podatke iz parametara i neki od tih parametara se vrednuju bez pozivanja na varijable.

Varijablama i metodama klase može se pristupiti korištenjem naziva klase nakon kojeg slijedi točka i naziv varijable ili metode.

Primjer

Statički modifikator u Javi koristi se za stvaranje metoda i varijabli klase, kao što je prikazano u sljedećem primjeru:

Javna klasa InstanceCounter (privatni statički int numInstances = 0; zaštićeni statički int getCount() (vrati numInstances; ) privatni statički void addInstance() (numInstances++; )InstanceCounter() (InstanceCounter.addInstance(); ) javni statički argument void main() ) ( System.out.println("Počevši od " + InstanceCounter.getCount() + " instanca"); for (int i = 0; i

Dobit će se sljedeći rezultat:

Počevši od instance 0 Stvoreno 500 instanci

završni modifikator

završni modifikator- koristi se za dovršenje implementacije klasa, metoda i varijabli.

konačne varijable

Konačna varijabla može se inicijalizirati samo jednom. Referentna varijabla deklarirana kao konačna nikada se ne može dodijeliti da se odnosi na drugi objekt.

Međutim, podaci unutar objekta mogu se mijenjati. Dakle, stanje objekta se može promijeniti, ali ne i referenca.

S varijablama u Javi, finalni modifikator se često koristi sa static kako bi varijabla klase postala konstanta.

Primjer

public class Test( final int value = 10; // Ispod su primjeri deklaracija konstante: public static final int BOXWIDTH = 6; static final String TITLE = "(!LANG:Manager"; public void changeValue(){ value = 12; //будет получена ошибка } } !}

konačne metode

Konačnu metodu ne može nadjačati nijedna podklasa. Kao što je ranije spomenuto, u Javi, finalni modifikator sprječava modificiranje metode od strane podklase.

Glavna namjera da se metoda učini konačnom bila bi da se sadržaj metode ne mijenja sa strane.

Primjer

Deklaracija metode koja koristi završni modifikator u deklaraciji klase prikazana je u sljedećem primjeru:

Javna klasa Test( public final void changeName()( // tijelo metode))

završni razred

Glavna svrha u Javi korištenja klase deklarirane kao final je spriječiti da klasa bude podklasirana. Ako je klasa označena kao konačna, tada nijedna klasa ne može naslijediti nijednu funkciju od finalne klase.

Primjer

javni završni razred test ( // tijelo razreda)

apstraktni modifikator

apstraktni modifikator- koristi se za stvaranje apstraktnih klasa i metoda.

apstraktna klasa

Apstraktna klasa ne može se instancirati. Ako je klasa proglašena apstraktnom, onda je njezina jedina svrha proširenje.

Razred ne može biti i apstraktan i konačan, jer se završni razred ne može proširiti. Ako klasa sadrži apstraktne metode, onda se mora proglasiti apstraktnom. U suprotnom će se generirati pogreška kompilacije.

Apstraktna klasa može sadržavati i apstraktne metode kao i obične.

Primjer

apstraktna klasa Caravan( privatna dvostruka cijena; privatni model niza; privatni niz godina; javni apstraktni void goFast(); //apstraktna metoda public abstract void changeColor(); )

apstraktna metoda

Apstraktna metoda je metoda deklarirana s bilo kojom implementacijom. Tijelo metode (implementacija) osigurava potklasa. Apstraktne metode nikada ne mogu biti konačne ili stroge.

Svaka klasa koja proširuje apstraktnu klasu mora implementirati sve apstraktne metode nadklase, osim ako potklasa nije apstraktna klasa.

Ako klasa u Javi sadrži jednu ili više apstraktnih metoda, tada se klasa mora proglasiti apstraktnom. Apstraktna klasa ne mora sadržavati apstraktne metode.

Apstraktna metoda završava točkom i zarezom. Primjer: javni apstraktni uzorak();

Primjer

javna apstraktna klasa SuperClass( apstraktna void m(); //apstraktna metoda ) klasa SubClass proširuje SuperClass( // implementira apstraktnu metodu void m()( ......... ) )

sinkronizirani modifikator

sinkronizirani modifikator

Sinkronizirana ključna riječ koristi se za označavanje da metodi može pristupiti samo jedna nit odjednom. U Javi se sinkronizirani modifikator može primijeniti s bilo kojim od četiri modifikatora razine pristupa.

Primjer

javni sinkronizirani void showDetails()( ....... )

tranzijentni modifikator

Varijabla instance označena kao prijelazni govori Java virtualnom stroju (JVM) da izostavi navedenu varijablu prilikom serijalizacije objekta koji je sadrži.

Ovaj modifikator je uključen u naredbu, koja stvara varijablu klase ili tipa podataka prethodnika varijable.

Primjer

javni prijelazni int limit = 55; // neće ustrajati public int b; // će biti spremljeno

volatile modifikator

volatile modifikator- koriste se u Javi za niti.

U Javi se modifikator volatile koristi kako bi JVM znao da varijabla pristupna nit uvijek treba spojiti vlastitu kopiju varijable s glavnom kopijom u memoriji.

Pristup promjenjivoj varijabli sinkronizira sve keširane kopirane varijable u RAM-u. Volatile se može primijeniti samo na varijable instance koje su tipa objekt ili privatne. Referenca na promjenjivi objekt može biti null.

Primjer

javna klasa MyRunnable implementira Runnable( private volatile boolean active; public void run()( active = true; while (active)( // red 1 // neki kod ovdje) ) public void stop()( active = false; / / red 2))

Obično se run() poziva na jednoj niti (ovo je prvi put da počnete koristiti Runnable u Javi), a stop() se poziva na drugoj niti. Ako se predmemorirana vrijednost aktivna koristi na retku 1, tada se petlja ne može zaustaviti dok ne postavite aktivnu na false u retku 2.

U sljedećoj lekciji raspravljat ćemo o osnovnim operatorima koji se koriste u jeziku Java. Ovaj odjeljak će vam dati pregled kako ih možete koristiti tijekom razvoja aplikacije.

Ovdje ćemo pokušati razmotriti gotovo sve slučajeve korištenja modifikatora pristupa. Jedina iznimka je njihova upotreba za ugniježđene ( ugniježđene) i interni ( unutarnje) klase, kao i za sučelja, budući da ove teme još nismo razmatrali.

Klase i paketi, koji se koriste zajedno s modifikatorima pristupa, služe kao sredstvo za enkapsulaciju, odnosno sredstvo za skrivanje detalja implementacije iza jednostavnog sučelja.

Modifikatori pristupa mogu se primijeniti i na klase i na njihove članove – polja i metode. Postoje ukupno četiri modifikatora pristupa, a ovdje ćemo ih kratko opisati, a zatim ćemo svaki detaljno razmotriti.

  • javnost- bilo koja komponenta deklarirana kao javnost, dostupnom iz bilo kojeg koda
  • zaštićen- omogućuje pristup komponenti unutar paketa i klasama potomcima
  • privatni- omogućuje pristup komponentama unutar klase
  • zadano(bez ključne riječi) - omogućuje pristup komponentama unutar paketa

Klase potomke su klase naslijeđene od klase. Nasljedstvo još nismo proučavali.

Pristup nastavi

Prema zadanim postavkama, klase najviše razine dostupne su u paketu u kojem su definirane.. Međutim, ako je klasa najviše razine deklarirana kao javnost, tada je dostupan posvuda (ili gdje god je dostupan sam paket). Ograničili smo ovu izjavu na klase najviše razine jer se klase mogu deklarirati kao članovi drugih klasa. Budući da su ove unutarnje klase članovi klase, podliježu pravilima kontrole pristupa za članove klase..

Pristup članovima razreda

Članovi razreda uvijek su dostupni unutar tijela razreda. Zadanočlanovi klase također su dostupni u paketu u kojem je klasa definirana.

javni modifikator

Za neugniježđenu klasu može se specificirati samo jedna od dvije moguće razine pristupa: data zadano I javnost . Kada je klasa deklarirana kao javnost, trebao bi biti jedini javnost klasa deklarirana u datoteci, a naziv datoteke mora odgovarati imenu klase.

Kako javnost klase, polja, metode i konstruktori mogu se deklarirati.

zaštićeni modifikator

O ovom modifikatoru ćemo detaljno raspravljati u temi nasljeđivanja klasa. Ako se nasljeđivanje ne koristi, onda ovaj modifikator radi, baš kao i zadani modifikator.

Jedino što se sada može ukratko reći je da za komponente deklarirane kao zaštićen, imat će pristup bilo koji dječji razred iz bilo kojeg paketa ili bilo koju klasu iz istog paketa.

Kako zaštićen mogu se deklarirati polja, metode, konstruktori, ugniježđene klase i ugniježđena sučelja.

zaštićen .

privatni modifikator

Ovo je najrestriktivniji modifikator pristupa. Elementi deklarirani kao privatni dostupno samo unutar istog razreda, a ne nikome izvan razreda.

Kako privatni mogu se deklarirati polja, metode, konstruktori, ugniježđene klase i ugniježđeni interesi.

Klase i sučelja najviše razine ne mogu se deklarirati kao privatni .

U biti, modifikatori pristupa su jednostavna tema, ali na nju ćemo se vratiti kasnije. Za sada je to bio samo uvod. A sad malo vježbe...

Napravio sam klase Mod02.java, DefMod.java, ProMod.java i PrvMod.java koje pripadaju paketu pro.java.pkg002 i klasu PubMod.java koja pripada paketu pro.java.pkg003. Zatim ću samo dati snimke zaslona ovih klasa i rezultat programa:

Posljednje ažuriranje: 03.10.2019

Svi članovi klase - polja, metode, svojstva - svi imaju modifikatori pristupa. Modifikatori pristupa omogućuju vam da postavite dopušteni opseg za članove klase. To jest, modifikatori pristupa definiraju kontekst u kojem se određena varijabla ili metoda može koristiti. U prethodnim temama već smo se susreli s time kada smo polja klase proglasili javnim (odnosno s modifikatorom public).

C# koristi sljedeće modifikatore pristupa:

    public : javni, javni razred ili član razreda. Takav član klase dostupan je s bilo kojeg mjesta u kodu, kao i iz drugih programa i sklopova.

    privatno : privatni razred ili član razreda. Predstavlja potpunu suprotnost modifikatoru public. Takva privatna klasa ili član klase dostupan je samo iz koda u istoj klasi ili kontekstu.

    protected : Takav član klase dostupan je s bilo kojeg mjesta u trenutnoj klasi ili u izvedenim klasama. U ovom slučaju, izvedene klase mogu se nalaziti u drugim sklopovima.

    interni : članovi klase i klase sa sličnim modifikatorom dostupni su s bilo kojeg mjesta u kodu u istom sklopu, ali nisu dostupni drugim programima i sklopovima (kao što je slučaj s modifikatorom public).

    zaštićeni unutarnji : kombinira funkcionalnost dvaju modifikatora. Klase i članovi klase s ovim modifikatorom dostupni su iz trenutnog sklopa i iz izvedenih klasa.

    private protected : Takav član klase dostupan je s bilo kojeg mjesta u trenutnoj klasi ili u izvedenim klasama koje su definirane u istom sklopu.

Možemo eksplicitno postaviti modifikator pristupa, na primjer:

Privatno zaštićeno stanje klase (interni int a; zaštićeni void Print() ( Console.WriteLine($"a = (a)"); ) )

Ili ne možemo navesti:

Stanje klase ( int a; void Print() ( Console.WriteLine($"a = (a)"); ) )

Ako modifikator pristupa nije definiran za polja i metode, tada se privatni modifikator primjenjuje prema zadanim postavkama.

Klase i strukture deklarirane bez modifikatora prema zadanim postavkama imaju interni pristup.

Sve klase i strukture definirane izravno u prostorima imena i nisu ugniježđene u drugim klasama mogu imati samo javne ili interne modifikatore.

Pogledajmo primjer i stvorimo sljedeću državnu klasu:

Public class State ( // nije važno je li private int defaultVar; int defaultVar; // polje je dostupno samo iz trenutne klase private int privateVar; // dostupno iz trenutne klase i izvedenih klasa koje su definirane u istoj projekt zaštićen private int protectedPrivateVar; // dostupno iz trenutne klase i izvedenih klasa protected int protectedVar; // dostupno bilo gdje u trenutnom projektu interni int internalVar; // dostupno bilo gdje u trenutnom projektu i iz izvedenih klasa u drugim projektima zaštićen interni int protectedInternalVar; // dostupno na bilo kojem mjestu u programu, kao i za druge programe i sklopove public int publicVar; // prema zadanim postavkama ima modifikator private void defaultMethod() => Console.WriteLine($"defaultVar = (defaultVar)" ); // metoda je dostupna samo iz trenutne klase private void privateMethod() => Console.WriteLine($"privateVar = (privateVar)"); // dostupna iz trenutne klase i izvedenih klasa koje su definirane u istoj klauzula projekt zaštićen privatni void protectedPrivateMethod() => Console.WriteLine($"protectedPrivateVar = (protectedPrivateVar)"); // dostupno iz trenutne klase i izvedenih klasa protected void protectedMethod()=> Console.WriteLine($"protectedVar = (protectedVar)"); // dostupno bilo gdje u trenutnom projektu interna void internalMethod() => Console.WriteLine($"internalVar = (internalVar)"); // dostupno bilo gdje u trenutnom projektu i iz izvedenih klasa u drugim projektima zaštićeno interno void protectedInternalMethod() => Console.WriteLine($"protectedInternalVar = (protectedInternalVar)"); // dostupno bilo gdje u programu, kao i za druge programe i sklopove public void publicMethod() => Console.WriteLine($"publicVar = (publicVar)"); )

Budući da je klasa State deklarirana s modifikatorom public, bit će dostupna s bilo kojeg mjesta u programu, kao i iz drugih programa i sklopova. Klasa State ima pet polja za svaku razinu pristupa. Plus jedna nepromijenjena varijabla koja je prema zadanim postavkama privatna.

Postoji i šest metoda koje će prikazati vrijednosti polja klase na ekranu. Imajte na umu da budući da vam svi modifikatori omogućuju korištenje članova klase unutar ove klase, tada su sve varijable klase, uključujući privatne, dostupne svim njezinim metodama, budući da su sve u kontekstu klase State.

Sada da vidimo kako možemo koristiti naše varijable klase u programu (tj. u glavnoj metodi klase Program), ako su klase State i Program u istom projektu:

Class Program ( static void Main(string args) ( State state1 = new State(); // nećemo moći dodijeliti vrijednost defaultVar varijabli, // budući da ima privatni modifikator i klasa Program ne vidi it // I okolina ne vidi ovu podvučenu liniju kao netočnu state1.defaultVar = 5; //Pogreška, ne može se pristupiti // isto vrijedi i za privateVar varijablu state1.privateVar = 5; // Pogreška, ne može se pristupiti // dodjela vrijednost za varijablu protectedPrivateVar neće raditi, // budući da klasa Program nije klasa koja nasljeđuje klasu State state1.protectedPrivateVar =5; // Pogreška, ne može se pristupiti // dodjela vrijednosti varijabli protectedVar također neće uspjeti, // jer klasa Program nije klasa koja nasljeđuje klasu State state1.protectedVar = 5; // Pogreška, ne može se pristupiti // varijabla internalVar s internim modifikatorom dostupna je s bilo kojeg mjesta u trenutnom projektu // pa smo može mu sigurno dodijeliti vrijednost state1.internalVar = 5; // varijabla protectedInternalVar također je dostupna s bilo kojeg mjesta u trenutnom statusu projekta1.protectedInternalVar = 5; // varijabla publicVar je javna state1.publicVar = 5; ))

Stoga smo mogli postaviti samo varijable internalVar, protectedInternalVar i publicVar, jer nam njihovi modifikatori dopuštaju da ih koristimo u ovom kontekstu.

Isto vrijedi i za metode:

Program klase ( static void Main(string args) ( State state1 = new State(); state1.defaultMethod(); //Pogreška, ne može se pristupiti state1.privateMethod(); // Greška, ne može se pristupiti state1.protectedPrivateMethod() ; // Pogreška, ne može se pristupiti state1.protectedMethod(); // Pogreška, ne može se pristupiti state1.internalMethod(); // ok state1.protectedInternalMethod(); // ok state1.publicMethod(); // ok ) )

Ovdje su nam se pokazale dostupne samo tri metode: internalMethod, protectedInternalMethod, publicMethod, koji imaju modifikatore interni, zaštićen interni, javni.

Zahvaljujući takvom sustavu modifikatora pristupa moguće je sakriti neke aspekte implementacije klase od drugih dijelova programa.

Unatoč činjenici da su javni i interni modifikatori slični po svom učinku, oni imaju veliku razliku. Klase i članovi klase s modifikatorom public također će biti dostupni drugim programima, ako se data klasa smjesti u dinamičku biblioteku dll i zatim koristi u tim programima.