Por qué la visibilidad paquete de utilización (por defecto), a menos que la clase debe ser público en Javapaquete de visibilidad
Respuesta
Lo que se obtiene por default
modificador es decir, sin ningún modificador de acceso (es decir, pública o privada protegida), significa que es visible para todos dentro de un paquete en particular. Entonces, cuando desee que su clase sea accesible solo en su propio paquete, debe optar por el default
.
Leer más: Controlling Access
Mi understaning es el acceso paquete/por defecto es para internos del paquete, es decir clases que no forman interfaz del paquete de, es decir, las clases que no deben utilizarse fuera del paquete.
Como dijo Rostislav Matl, es útil para cuando quiere hacer algo que no forma parte de la interfaz de su paquete.
Como ejemplo, imagine que tiene un paquete y proporciona una interfaz y al menos una implementación concreta de un servicio.
Las personas que utilizan este servicio se preocuparán por la interfaz que proporcione y utilizará una de las clases concretas que proporcione, pero no les interesará mucho más. Nuestro servicio tiene que hablar con una base de datos y debe poder asignar el resultado de las consultas de la base de datos a su propio tipo de datos (que forman su contrato).
Creo que regularmente creo paquetes de clases de ayuda privadas que contienen métodos de tipo de utilidad o realizan tareas como la asignación que necesitamos. La visibilidad predeterminada (paquete privado) es perfecta para esto porque otras clases dentro de su paquete pueden usar estos ayudantes, pero nadie fuera del paquete puede verlos, por lo que puede cambiarlos cuando lo desee.
Este es un ejemplo utilizando un código:
Tenemos nuestra interfaz:
public interface UsefulService {
Collection<DataThings> getThings(Identifier id);
}
... y nuestra aplicación concreta:
public class JdbcUsefulServiceImpl implements UsefulService {
//We can break the code for the mapping out into its own class
private Mapper mapper;
@Override
public Collection<DataThings> getThings(Identifier id){
DatabaseQueryResult queryResult = //Code to hit a database and return objects from that domain model
Collection<DataThings> result = mapper.mapFromDatabaseToServiceDomain(queryResult);
return result;
}
}
entonces tenemos nuestro asignador. No necesitamos a nadie fuera del paquete que se preocupan por el servicio funciona internamente de modo que utilizamos el paquete visibilidad privada y podemos tener tantas clases como queremos hacer el trabajo:
class Mapper {
Collection<DataThings> mapFromDatabaseToServiceDomain(DatabaseQueryResult queryResult){
//magic to map objects goes here
}
}
La ventaja que tenemos es que siempre podemos cambiar esta clase de Mapper como queramos o eliminarla o crear nuevas clases privadas de paquete y sabemos que los únicos efectos (inmediatos) que podemos causar están dentro de este paquete. Por efectos inmediatos me refiero a errores de compilación y cosas serias como esa. Obviamente, podría interrumpir su servicio si cambia su comportamiento, pero eso es lo que su suite de pruebas automatizada está ahí para detectar: P
- 1. Java: ¿visibilidad del subpaquete?
- 2. Visibilidad en subpaquetes
- 3. Vinculación Visibilidad en XAML a una propiedad de Visibilidad
- 4. Visibilidad: colapso se representa como la visibilidad: oculto
- 5. Silverlight DataGridTextColumn Vinculación Visibilidad
- 6. Concurrencia, visibilidad del objeto
- 7. WPF Tooltip Visibilidad
- 8. __destruct visibilidad para PHP
- 9. DataGridTextColumn Visibilidad Encuadernación
- 10. visibilidad: visible/oculto div
- 11. Android Vista Visibilidad GONE
- 12. Visibilidad Java campo privado
- 13. Visibilidad atributo cuestionar
- 14. Paquete de rieles: ¿cómo deshacer paquete paquete?
- 15. Visibilidad predeterminada de los métodos de clase en PHP
- 16. Animación de visibilidad de panel de WPF
- 17. métodos públicos en clases privadas de paquete
- 18. versión-script y visibilidad oculta
- 19. Visibilidad orientada a objetos php
- 20. Mostrar visibilidad en Argo UML
- 21. Java clase interna rompecabezas visibilidad
- 22. Marcador Visibilidad En Google Maps
- 23. Magento: Obtenga visibilidad del producto
- 24. cambiando la visibilidad usando javascript
- 25. Visibilidad estándar para métodos abstractos
- 26. Evento Visibilidad JQuery/Javascript/DOM
- 27. ¿Visibilidad de miembros de la clase?
- 28. Alternar visibilidad de filas de tabla adicionales
- 29. Cierre de Javascript y visibilidad de datos
- 30. Restringir la visibilidad constructor de la clase en Scala 2.9
Leer un poco de información ayudaría, p. [Pensando en Java] (http://www.mindview.net/Books/TIJ/) capítulo 5. Todo esto ha sido escrito antes. –
Para las interfaces, la visibilidad predeterminada es pública. ;) –