Java >> Java tutorial >  >> Tag >> protected

Forskellen mellem standardadgangsspecifikationen og beskyttet adgangsspecifikationen i java

Denne Java-tutorial kan være til noget for dig.

Modifier    | Class | Package | Subclass | World

public      |  Y    |    Y    |    Y     |   Y

protected   |  Y    |    Y    |    Y     |   N

no modifier |  Y    |    Y    |    N     |   N

private     |  Y    |    N    |    N     |   N

protected specifier tillader adgang for alle underklasser af den pågældende klasse, uanset hvilken pakke de befinder sig i, såvel som til anden kode i den samme pakke. Standardspecifikationen tillader adgang med anden kode i den samme pakke, men ikke med kode, der er i underklasser, der ligger i forskellige pakker. Se Java-sprogspecifikation, afsnit 6.6.

EDIT:Efter anmodning fra Michael Schmeißer (så andre ikke behøver at læse kommentarerne igennem eller følge et link for at finde dette):alle medlemmer af grænseflader er implicit offentlige. Det er faktisk en kompileringsfejl at angive en hvilken som helst adgangsspecifikation for et interfacemedlem andet end public (selvom ingen adgangsspecifikation overhovedet er standard for offentlig adgang). Her er det fulde sæt regler fra JLS for klassemedlemmer (se ovenstående link for reglerne for pakker, klasser og grænseflader på øverste niveau og arrays):

Et medlem (klasse, grænseflade, felt eller metode) af en reference (klasse, grænseflade eller array) type eller en konstruktør af en klassetype er kun tilgængelig, hvis typen er tilgængelig, og medlemmet eller konstruktøren er erklæret at tillade adgang:

  • Hvis medlemmet eller konstruktøren er erklæret offentlig, er adgang tilladt.

  • Alle medlemmer af grænseflader er implicit offentlige.

  • Ellers, hvis medlemmet eller konstruktøren er erklæret beskyttet, er adgang kun tilladt, når et af følgende er sandt:

  • Adgang til medlemmet eller konstruktøren sker fra pakken, der indeholder den klasse, hvori det beskyttede medlem eller konstruktør er erklæret.

  • Adgangen er korrekt som beskrevet i §6.6.2. (Denne klausul henviser til reglerne, der tillader afledte klasser at få adgang til beskyttede medlemmer af superklasser; §6.6.2 starter:"Et beskyttet medlem eller konstruktør af et objekt kan kun tilgås uden for pakken, hvori det er erklæret kun af kode, der er ansvarlig for implementeringen af ​​det pågældende objekt." Det uddyber så.)

  • Ellers, hvis medlemmet eller konstruktøren er erklæret privat, er adgang kun tilladt, hvis og kun hvis det forekommer inden for kroppen af ​​klassen på øverste niveau (§7.6), der omslutter medlemmets eller konstruktørens erklæring.

  • Ellers siger vi, at der er standardadgang, som kun er tilladt, når adgangen sker fra den pakke, som typen er deklareret i.


Beskyttet adgang specifier - der er to måder at få adgang til beskyttede data på

  1. De beskyttede datamedlemmer, beskyttede metoder i en klasse vil være synlige for de andre klasser, hvis de ligger i samme pakke

  2. Brug af Arv

    betyder, at vi kan bruge de beskyttede data for den pågældende klasse ved at arve den klasse.

Standardadgangsspecifikation- Kun én måde at få adgang til standarddata

Standard begrænser kun adgangen til pakkeniveau, selv efter udvidelse af klassen med standarddatamedlemmer, vil vi ikke kunne få adgang.

Eksempel

For at kontrollere det for standard fjern beskyttet søgeord for int x i ProvideProtected vil der blive genereret en kompileringstidsfejl.

        1. SuperClass

        package nee.superclass;

        public class ProvideProtected {
            protected int x=800;

        }

        2.Subclass


        package nee.subclass;

        import nee.superclass.*;

        public class AccessProtected extends ProvideProtected 

        {   
        public void accessProtected()
            {
                System.out.println(x);
            }

            public static void main(String[] args) {
                AccessProtected obj=new AccessProtected();
                obj.accessProtected();

            }

        }

Java tag