Java >> Java tutorial >  >> Tag >> private

Adgangsmodifikatorer i Java - offentlig, privat, beskyttet og standard

Adgangsniveaumodifikatorer i Java (offentlig, privat, beskyttet, standard) bruges til at kontrollere synligheden af ​​klassen eller medlemmerne af klassen, dvs. felter og metoder. Disse adgangsmodifikatorer bestemmer, om andre klasser kan bruge et bestemt felt, påkalde en bestemt metode eller oprette objekter af en given klasse.

Indholdsfortegnelse
  1. Typer af adgangsmodifikatorer i Java
  2. Adgangsmodifikator med Java-klasser
  3. Java Access-modifikatorer med felter
  4. Java Access-modifikator med metoder
  5. Adgangsmodifikator med konstruktører
  6. Klassemedlemsadgangsoversigt

Typer af adgangsmodifikatorer i Java

  • privat - private modifier angiver, at medlemmet kun kan tilgås i sin egen klasse.
  • standard (eller pakke-privat) - Hvis der ikke bruges en specifier (som er kendt som standardadgang), er medlem kun synlig i sin egen pakke.
  • beskyttet - protected modifier specificerer, at medlemmet kun kan tilgås inden for sin egen pakke og af en underklasse af sin klasse i en anden pakke.
  • offentlig - public modifier angiver, at medlem er synlig for alle klasser overalt.

Adgangsmodifikatorer i Java kan bruges med-

  • Klasse
  • Felter
  • Metoder
  • Konstruktører

Adgangsmodifikator med Java-klasser

I Java programmeringssprog kun to af adgangsmodifikatorerne kan bruges på klasseniveau - offentlig eller standard .

  • Hvis en klasse er erklæret med adgangsmodifikatoren som offentlig, er denne klasse synlig for alle klasser overalt.
  • Hvis en klasse ikke har nogen modifikator (standard), er den kun synlig i sin egen pakke .

Eksempel på Java-standardadgangsmodifikator

Hvis der er én klasse DefaultClass i pakken org.netjs.examples

package org.netjs.examples;

class DefaultClass {
 public void display(){
  System.out.println("display method : Default class");
 }
}

Så hvis du forsøger at oprette objekt af denne klasse i en anden klasse, som ligger i en anden pakke (org.netjs.prog ) vil det resultere i kompileringstidsfejl.

package org.netjs.prog;

public class Test {
 public static void main(String[] args) {
  // ERROR
  DefaultClass dc = new DefaultClass();
 }
}

Java Access-modifikatorer med felter

Alle de fire typer af adgangsmodifikatorer i Java- offentlig , beskyttet , standard , privat kan bruges med variabler deklareret i klassen.

  • Hvis et felt er erklæret som offentligt, er det synligt for alle klasser i den samme pakke eller andre pakker.
  • Hvis et felt er erklæret uden adgangsspecifikation (standard), så kan det tilgås af enhver klasse i den samme pakke.
  • Hvis et felt er defineret som beskyttet, er det tilgængeligt for enhver klasse i den samme pakke eller for enhver underklasse (af klassen, hvor feltet er erklæret) i en anden pakke.
  • Hvis et felt er defineret som privat, kan dette felt kun tilgås i dets egen klasse.

Lad os tage et eksempel, når et felt er beskyttet-

Hvis der er klasse DefaultClass i pakken org.netjs.examples

package org.netjs.examples;

public class DefaultClass {
 protected String item;
 public void display(){
  System.out.println("display method : Default class");
 }
}
Derefter i Test-klassen i en anden pakke org.netjs.examples elementvariablen vil ikke være tilgængelig. Det vil give "felt ikke synligt " fejl.
package org.netjs.examples;

public class Test {
  public static void main(String[] args) {
    DefaultClass dc = new DefaultClass();
    //Error
    dc.item = "laptop";
  }
}

Hvis testklassen udvides DefaultClass, så vil elementvariablen være tilgængelig med Test-klasseobjektet.

package org.netjs.examples;

public class Test extends DefaultClass {
 public static void main(String[] args) {
  Test t = new Test();
  t.item = "laptop";
 }
}

Java Access-modifikator med metoder

Alle de fire typer af adgangsmodifikatorer- offentlige , beskyttet , standard , privat kan bruges med metoder i klassen og adgangsmodifikator for metoderne fungerer på samme måde som for felterne.

Adgangsmodifikator med konstruktører

Alle fire typer af adgangsmodifikatorer i Java- offentlig , beskyttet , standard , privat kan bruges med konstruktører af klassen.

I tilfælde af konstruktør af klassen er privat så kan objektet for den klasse kun oprettes af den klasse . Du har måske set det i Singleton designmønster.

Hvis der ikke bruges nogen modifikator (standard), kan klassens objekt oprettes af klasserne med i den samme pakke.

Som eksempel, hvis der er en klasse DefaultClass i pakken org.netjs.examples

public class DefaultClass {
  // Constructor
  DefaultClass(){
    System.out.println("In DefaultClass constructor ");
  }
  protected String item;
  public void display(){
    System.out.println("display method : Default class");
  }
}

Prøver derefter at få adgang til konstruktøren af ​​DefaultClass i klassen Test (underklasse af DefaultClass), som ligger i org.netjs.prog pakke vil resultere i kompileringstidsfejl - "Konstruktøren DefaultClass() er ikke synlig "

package org.netjs.prog;

import org.netjs.examples.DefaultClass;

public class Test extends DefaultClass{
  Test(){
    super();
  }
  public static void main(String[] args) {
    Test t = new Test();
  }
}

I tilfælde af DefaultClass' konstruktør er markeret som beskyttet så vil ovenstående program virke. Som underklasse i forskellige pakker kan få adgang til den beskyttede konstruktør .

Hvis konstruktøren af ​​klassen er offentlig, kan dens objekt oprettes fra et hvilket som helst sted - klasse, der ligger i den samme pakke eller i en anden pakke.

Klassemedlemsadgangsoversigt

Følgende tabel viser adgangsniveauerne for klassemedlemmer med forskellige adgangsmodifikatorer i Java.

Privat Ingen ændring Beskyttet Offentlig
Samme klasse Ja Ja Ja Ja
Samme pakkeunderklasse Nej Ja Ja Ja
Samme pakke en anden klasse Nej Ja Ja Ja
Anden pakkeunderklasse Nej Nej Ja Ja
Anden pakke anden klasse Nej Nej Nej Ja

Det er alt for dette emne Adgangsmodifikatorer i Java - Offentlig, Privat, Beskyttet og Standard . Hvis du er i tvivl eller har forslag til at komme med, så smid en kommentar. Tak!


Java tag