logo

Modifikátory přístupu v Javě

Modifikátory přístupu v Javě jsou základními nástroji, které definují, jak lze k členům třídy, jako jsou metody proměnných, a dokonce i ke třídě samotné přistupovat z jiných částí našeho programu.

V Javě jsou k dispozici 4 typy modifikátorů přístupu: 

Access-Modifiers-in-Java-1' title=Modifikátory přístupu v Javě

Modifikátor soukromého přístupu

Modifikátor soukromého přístupu je určen pomocí klíčového slova private. Metody nebo datové členy deklarované jako soukromé jsou přístupné pouze v rámci třídy, ve které jsou deklarovány.



Java
class Person {  // private variable  private String name;  public void setName(String name) {  this.name = name; // accessible within class  }  public String getName() { return name; } } public class Geeks {  public static void main(String[] args)  {  Person p = new Person();  p.setName('Alice');  // System.out.println(p.name); // Error: 'name'  // has private access  System.out.println(p.getName());  } } 

Výstup
Alice 

Vysvětlení: Přímý přístup ke jménu není povolen mimo Osoba prosazující zapouzdření.

Výchozí modifikátor přístupu

Není-li pro metodu třídy nebo datový člen zadán žádný modifikátor přístupu, říká se, že má ve výchozím nastavení výchozí modifikátor přístupu. To znamená, že k němu mají přístup pouze třídy v rámci stejného balíčku.

Java
class Car {  String model; // default access } public class Main {    public static void main(String[] args){    Car c = new Car();  c.model = 'Tesla'; // accessible within the same package  System.out.println(c.model);  } } 

Výstup
Tesla 

Vysvětlení: Ke členům s výchozím přístupem nelze přistupovat z tříd v jiném balíčku.

Geeks.java: Výchozí třída ve stejném balíčku

Java
// default access modifier  package p1;  // Class Geek is having  // Default access modifier  class Geek  {   void display()   {   System.out.println('Hello World!');   }  } 

GeeksNew.java: Výchozí třída z jiného balíčku (pro kontrast)

C++
// package with default modifier  package p2;  import p1.*; // importing package p1 // This class is having  // default access modifier  class GeekNew {   public static void main(String args[]) {     // Accessing class Geek from package p1   Geek o = new Geek();   o.display();   }  } 

Vysvětlení:  V tomto příkladu program zobrazí chybu při kompilaci, když se pokusíme získat přístup k výchozí třídě modifikátoru z jiného balíčku.

Modifikátor chráněného přístupu

Modifikátor chráněného přístupu se zadává pomocí klíčového slova protected. Metody nebo datové členy deklarované jako chráněné jsou přístupné v rámci stejného balíčku nebo podtříd v různých balíčcích.

Java
class Vehicle {  protected int speed; // protected member } class Bike extends Vehicle {  void setSpeed(int s)  {  speed = s; // accessible in subclass  }  int getSpeed()  {  return speed; // accessible in subclass  } } public class Main {  public static void main(String[] args){    Bike b = new Bike();  b.setSpeed(100);  System.out.println('Access via subclass method: '  + b.getSpeed());  Vehicle v = new Vehicle();  System.out.println(v.speed);  } } 

Výstup
Access via subclass method: 100 0 

Vysvětlení: rychlost je přístupná prostřednictvím metod podtřídy a dalších tříd ve stejném balíčku, ale přímý přístup z jiného balíčku (nepodtřídy) by selhal.

Modifikátor veřejného přístupu

Modifikátor veřejného přístupu je specifikován pomocí klíčového slova public. Veřejní členové jsou přístupní odkudkoli v programu. Neexistuje žádné omezení rozsahu členů veřejných údajů.

Java
class MathUtils {     public static int add(int a int b) {  return a + b;  } } public class Main {    public static void main(String[] args) {    System.out.println(MathUtils.add(5 10)); // accessible anywhere  } } 

Výstup
15 

Vysvětlení: add() je globálně přístupné díky modifikátoru public.

Třídy nebo rozhraní nejvyšší úrovně nelze deklarovat jako soukromé, protože soukromé znamená „viditelné pouze v rámci ohraničující třídy“.

Srovnávací tabulka přístupových modifikátorů v Javě

stejná_třída' loading='lazy' title=Access-Modifier

Kdy použít každý modifikátor přístupu v projektech reálného světa

  • soukromé: Myšlenkou by mělo být použití co nejomezujícího přístupu, takže soukromý by měl být používán co nejvíce.
  • Výchozí (Package-Private): Často se používá v obslužných programech s rozsahem balíčků nebo pomocných třídách.
  • Chráněný: Běžně se používá v návrzích založených na dědičnosti, jako jsou rozšíření rámců.
  • Veřejnost : Používá se pro třídy služeb koncových bodů API nebo obslužné metody sdílené v různých částech aplikace.


Vytvořit kvíz