Buscar..


Sintaxis

  • nombre de tipo público [= valor];
  • nombre de tipo privado [= valor];
  • nombre de tipo protegido [= valor];
  • escriba nombre [= valor];
  • nombre de la clase pública {
  • nombre de la clase{

Observaciones

Desde el tutorial de Java :

Los modificadores de nivel de acceso determinan si otras clases pueden usar un campo en particular o invocar un método en particular. Hay dos niveles de control de acceso:

  • En el nivel superior: public o paquete privado (sin modificador explícito).
  • A nivel de miembro: public , private , protected o paquete privado (sin modificador explícito).

Una clase puede ser declarada con el modificador public , en cuyo caso esa clase es visible para todas las clases en cualquier lugar. Si una clase no tiene modificador (el valor predeterminado, también conocido como paquete-privado ), es visible solo dentro de su propio paquete.

En el nivel de miembro, también puede usar el modificador public o ningún modificador ( paquete-privado ) al igual que con las clases de nivel superior, y con el mismo significado. Para los miembros, hay dos modificadores de acceso adicionales: private y protected . El modificador private especifica que solo se puede acceder al miembro en su propia clase. El modificador protected especifica que solo se puede acceder al miembro dentro de su propio paquete (como con el paquete privado ) y, además, mediante una subclase de su clase en otro paquete.

La siguiente tabla muestra el acceso a los miembros permitido por cada modificador.

Niveles de acceso:

Modificador Clase Paquete Subclase Mundo
public Y Y Y Y
protected Y Y Y norte
sin modificador Y Y norte norte
private Y norte norte norte

Miembros de la interfaz

public interface MyInterface {
    public void foo();
    int bar();

    public String TEXT = "Hello";
    int ANSWER = 42;

    public class X {
    }

    class Y {
    }
}

Los miembros de la interfaz siempre tienen visibilidad pública, incluso si se omite public palabra clave public . Entonces, tanto foo() , bar() , TEXT , ANSWER , X e Y tienen visibilidad pública. Sin embargo, el acceso aún puede estar limitado por la interfaz que contiene, ya que MyInterface tiene visibilidad pública, se puede acceder a sus miembros desde cualquier lugar, pero si MyInterface hubiera tenido visibilidad del paquete, sus miembros solo serían accesibles desde el mismo paquete.

Visibilidad pública

Visible para la clase, paquete y subclase.

Veamos un ejemplo con la prueba de clase.

public class Test{
    public int number = 2;

    public Test(){

    }
}

Ahora intentemos crear una instancia de la clase. En este ejemplo, podemos acceder al number porque es public .

public class Other{
    
    public static void main(String[] args){
        Test t = new Test();
        System.out.println(t.number);
    }

}

Visibilidad privada

private visibilidad private permite que una variable solo sea accesible por su clase. A menudo se utilizan en conjunto con captadores y setters public .

class SomeClass {
    private int variable;

    public int getVariable() {
        return variable;
    }

    public void setVariable(int variable) {
        this.variable = variable;
    }
}

public class SomeOtherClass {
    public static void main(String[] args) {
        SomeClass sc = new SomeClass();
        
        // These statement won't compile because SomeClass#variable is private:
        sc.variable = 7;
        System.out.println(sc.variable);

        // Instead, you should use the public getter and setter:
        sc.setVariable(7);
        System.out.println(sc.getVariable());
    }
}

Visibilidad del paquete

Sin modificador , el valor predeterminado es la visibilidad del paquete. De la documentación de Java, "[visibilidad del paquete] indica si las clases en el mismo paquete que la clase (independientemente de su origen) tienen acceso al miembro". En este ejemplo de javax.swing ,

package javax.swing;
public abstract class JComponent extends Container … {
    …
    static boolean DEBUG_GRAPHICS_LOADED;
    …
}

DebugGraphics está en el mismo paquete, por lo que DEBUG_GRAPHICS_LOADED es accesible.

package javax.swing;
public class DebugGraphics extends Graphics {
    …
    static {
        JComponent.DEBUG_GRAPHICS_LOADED = true;
    }
    …
}

Este artículo da algunos antecedentes sobre el tema.

Visibilidad Protegida

Causas de visibilidad protegida significa que este miembro es visible para su paquete, junto con cualquiera de sus subclases.

Como ejemplo:

package com.stackexchange.docs;
public class MyClass{
    protected int variable; //This is the variable that we are trying to access
    public MyClass(){
        variable = 2;
    };
}

Ahora extenderemos esta clase e intentaremos acceder a uno de sus miembros protected .

package some.other.pack;
import com.stackexchange.docs.MyClass;
public class SubClass extends MyClass{
    public SubClass(){
        super();
        System.out.println(super.variable);
    }
}

También podría acceder a un miembro protected sin extenderlo si accede desde el mismo paquete.

Tenga en cuenta que este modificador solo funciona en miembros de una clase, no en la clase en sí.

Resumen de los Modificadores de Acceso de los Miembros de la Clase

Modificador de acceso Visibilidad Herencia
Privado Solo clase No puede ser heredado
Sin modificador / paquete En paquete Disponible si subclase en paquete
Protegido En paquete Disponible en subclase
Público En todos lados Disponible en subclase

Hubo una vez un modificador private protected (ambas palabras clave a la vez) que podría aplicarse a métodos o variables para hacerlos accesibles desde una subclase fuera del paquete, pero hacerlos privados a las clases en ese paquete. Sin embargo, esto fue eliminado en la versión de Java 1.0 .



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow