java - encapsulamiento - modificadores de acceso poo
¿Cuál es el modificador de acceso predeterminado en Java? (13)
Esta pregunta ya tiene una respuesta aquí:
¿Cuál es el modificador de acceso predeterminado para un método o una variable de instancia si no lo declaro explícitamente?
Por ejemplo:
package flight.booking;
public class FlightLog
{
private SpecificFlight flight;
FlightLog(SpecificFlight flight)
{
this.flight = flight;
}
}
¿El modificador de acceso de este constructor está protegido o es un paquete? ¿Pueden otras clases en el mismo paquete, que es flight.booking
, llamar a este constructor?
¿El modificador de acceso de este constructor está protegido o es un paquete?
Creo que implícitamente el modificador de acceso de tus constructores sería el modificador de acceso de tu clase. como su clase tiene acceso público, el constructor tendría acceso público implícitamente
Aquí hay un ejemplo de código que debería resumir esto ... Además del siguiente, que muestra cómo no se puede acceder a un valor predeterminado en otro paquete, hay una cosa más.
No se puede acceder al valor predeterminado en una subclase si la clase que las subclasifica está en otro paquete, pero está accesible si la subclase está en el mismo paquete.
package main;
public class ClassA {
private int privateVar;
public int publicVar;
int defaultVar;
}
package main;
public class ClassB {
public static void main(String[] args) {
ClassA a = new ClassA();
int v1 = a.publicVar; // Works
int v2 = a.defaultVar; // Works
int v3 = a.privateVar; // Doesn''t work
}
}
package other;
public class ClassC {
public static void main(String[] args) {
ClassA a = new ClassA();
int v1 = a.publicVar; // Works
int v2 = a.defaultVar; // Doesn''t work
int v3 = a.privateVar; // Doesn''t work
}
}
De la documentación de Java
Si una clase no tiene modificador (el valor predeterminado, también conocido como paquete-privado), solo es visible dentro de su propio paquete (los paquetes se denominan grupos de clases relacionadas; usted aprenderá sobre ellos en una lección posterior).
En el member level
, también puede usar el modificador público o no modifier
(paquete-privado) al igual que con las clases de nivel superior, y con el mismo significado.
La historia completa que puedes leer aquí ( que escribí recientemente ):
http://codeinventions.blogspot.com/2014/09/default-access-modifier-in-java-or-no.html
De la documentación:
Access Levels
Modifier Class Package Subclass World
-----------------------------------------------------
public Y Y Y Y
protected Y Y Y N
(Default) Y Y N N
private Y N N N
De un libro llamado OCA Java SE 7 Programmer I :
Los miembros de una clase definida sin utilizar ningún modificador de acceso explícito se definen con la accesibilidad del paquete (también llamada accesibilidad predeterminada). Los miembros con acceso a paquetes solo son accesibles a clases e interfaces definidas en el mismo paquete.
Depende del contexto.
Cuando está dentro de una clase:
class example1 {
int a = 10; // This is package-private (visible within package)
void method1() // This is package-private as well.
{
-----
}
}
Cuando está dentro de una interfaz:
interface example2 {
int b = 10; // This is public and static.
void method2(); // This is public and abstract
}
El modificador de acceso de tu constructor sería package-private (predeterminado) . Como ha declarado pública la clase, será visible en todas partes, pero el constructor no lo hará. Tu constructor será visible solo en su paquete.
package flight.booking;
public class FlightLog // Public access modifier
{
private SpecificFlight flight;
FlightLog(SpecificFlight flight) // Default access modifier
{
this.flight = flight;
}
}
Cuando no escribe ningún constructor en su clase, el compilador genera un constructor predeterminado con el mismo modificador de acceso de la clase. Para el siguiente ejemplo, el compilador generará un constructor predeterminado con el modificador de acceso público (igual que la clase).
package flight.booking;
public class FlightLog // Public access modifier
{
private SpecificFlight flight;
}
El modificador de acceso predeterminado es package-private (es decir, DEFAULT) y solo es visible desde el mismo paquete.
El modificador de acceso predeterminado es paquete privado, visible solo desde el mismo paquete
El modificador predeterminado es package
. Solo el código en el mismo paquete podrá invocar este constructor.
Modificador de acceso predeterminado: si una clase no tiene modificador (el valor predeterminado, también conocido como paquete-privado), solo es visible dentro de su propio paquete (los paquetes son grupos con nombre de clases relacionadas).
No, no puede llamar el nivel de acceso predeterminado al otro paquete. Pero tienes el acceso dentro del paquete. Siga este enlace para más detalles.
Sí, es visible en el mismo paquete. Cualquier cosa que esté fuera de ese paquete no podrá acceder a él.