En C#, puede marcar una clase como internal
para que solo sea accesible desde el mismo paquete. ¿Hay algo similar en Java?¿Hay algo así como una clase interna en Java?
Respuesta
Puede crear clases del paquete y el privado por omitir el modificador de la seguridad (pública y privada) de la declaración de la clase.
package com.sample;
class MyPackagePrivateClass
{
...
}
Dejando caer el modificador de acceso es similar a la interna en C#.
C#
public class A
{
public static int X;
internal static int Y;
private static int Z;
}
internal class B
{
public static int X;
internal static int Y;
private static int Z;
public class C
{
public static int X;
internal static int Y;
private static int Z;
}
private class D
{
public static int X;
internal static int Y;
private static int Z;
}
}
Java
public class A
{
public static int X;
static int Y;
private static int Z;
}
class B
{
public static int X;
static int Y;
private static int Z;
public class C
{
public static int X;
static int Y;
private static int Z;
}
private class D
{
public static int X;
static int Y;
private static int Z;
}
}
Sí. Se llama paquete privado, que acaba de definir la clase sin ningún modificador:
package com.blah; class Foo{ }
Puede hacer un paquete de clase local. Este es el alcance predeterminado para una clase. es decir, donde no tiene modificadores de acceso.
Si realmente quiere poner en algún momento se puede crear una anotación por ejemplo, @package_local, hago esto en lugares donde esperemos que sea un paquete local y no lo deje sin especificar.
Sí, el nivel de acceso (privado paquete) por defecto. Simplemente omita cualquier modificador de acceso en la definición de su clase y obtendrá lo que desea.
No estoy familiarizado con C#, pero en Java la protección por defecto es que algo es sólo accesible dentro del paquete:
pública = accesible por cualquier persona
privada = accesible sólo dentro de la clase actual
protegida = accesible dentro de un envase o en cualquier clase que hereda de la clase actual
defecto = accesible dentro del paquete
Siempre he pensado que debería haber una manera de decir "accesible por cualquier clase que herede de la clase actual pero no desde ningún otro lugar, este paquete o cualquier otro". Pero no hay.
Para su último comentario, C# tiene "protección interna" – projectshave
@projectshave no está mal. También se puede acceder a "protegido interno" en C# desde todo su ensamblaje. en realidad, para limitar el acceso de una clase solo a sus subclases en el uso de J # C "protegido". mientras que en java "protegido" se podrá acceder desde el mismo paquete más a las subclases. –
esta pregunta tiene una respuesta aceptada antes, pero creo que la respuesta no es totalmente claro para alguien que es nuevo en java que viene de .Net.
¿Se Java tienen algún equivalente exacto para modificador interno en C#? la respuesta corta es NO (pero puede lograrlo de alguna manera y lo diré) !!
interna en C# es en realidad un modificador de "montaje-privada". ¿Qué es una asamblea?
Asamblea es cualquier producto de su proyecto (DLL o EXE en C# - equivalente en Java puede ser un archivo JAR)
no hay ningún equivalente exacto para uso en interior en Java. y lo que ha sido respondido por Bryan Kyle y aceptado es en realidad "paquete privado" (los paquetes en Java son equivalentes para los espacios de nombres en C#) pero de alguna manera lo que se ha respondido es la forma más cercana de obtener el mismo resultado.
PERO, ¿cómo obtener el mismo resultado que el interno? ¿No puede Java tener una solución para esto? la respuesta es sí.
tiene. pero no con un modificador. En realidad, la mejor manera de hacerlo es un secreto en el embalaje. la mejor práctica de empacar es empacar sus clases por su relación, no por su tipo.
muchos de nosotros usamos paquetes llamados "Modelos" o "Presentadores" y ponemos todos nuestros modelos o presentadores en ellos. mientras esto es tan malditamente incorrecto los paquetes deben ser como "Libro" que contiene "BookModel.java", "BookPresenter.java", .....
de esta manera puede hacer que sean paquetes privados al omitir el modificador y no tener ningún problema porque puede acceda a ellos en cualquier clase que necesite su clase privada de paquete porque tiene una buena práctica de empaquetado.
- 1. ¿Hay algo así como find_if en Java?
- 2. ¿Hay algo así como Codecademy para Java
- 3. ¿Hay algo así como un carácter comodín en Java?
- 4. ¿Hay algo así como herencia de anotación en java?
- 5. ¿Hay algo así como indicadores en Lua?
- 6. ¿Hay algo así como auto para los métodos de clase?
- 7. ¿Cómo obtengo algo así como una clase interna anónima en Groovy?
- 8. ¿Hay algo así como ZenTest/Autotest para Java y JUnit
- 9. ¿Hay algo así como `last` for` map`?
- 10. ¿Hay algo así como Incanter para Haskell?
- 11. ¿Hay algo así como un modelo funcional?
- 12. ¿Hay algo así como WMI para Linux?
- 13. ¿Hay algo así como "global ::" para VB.NET?
- 14. ¿Hay algo así como bpython para Ruby?
- 15. ¿Hay algo así como AutoMapper para Scala?
- 16. Algo así como Apache Zookeeper sin Java?
- 17. ¿Existe algo así como AJEDREZ para Java?
- 18. ¿Hay algo así como una altura de línea automática?
- 19. ¿Hay algo así como Eclipse Perspective en Visual Studio?
- 20. ¿Hay algo como instanceOf (clase <?> c) en Java?
- 21. ¿Tiene Python algo así como clases internas anónimas de Java?
- 22. ¿Hay algo así como i en rango (longitud) en PHP?
- 23. ¿Hay algo así como linux ptrace syscall en Windows?
- 24. ¿Hay algo así como var_dump de PHP en c/C++?
- 25. ¿Hay algo así como un bool nulo en vb.net
- 26. ¿Hay algo así como un flujo nulo en Ruby?
- 27. ¿Hay algo así como una tabla de ramificación/salto en Java?
- 28. ¿hay algo así como isset de php en javascript/jQuery?
- 29. ¿Hay algo así como TimeSpan en el desarrollo de Android?
- 30. ¿Hay algo así como Restrictions.eq (verdadero, falso) en Criteria API?
Posible duplicado de http://stackoverflow.com/questions/2534733/java-protected-classes – pintxo
@cmmi: Realmente no es un duplicado, ya que la pregunta se realiza desde una perspectiva completamente diferente. La misma respuesta sin embargo. –
Tenga en cuenta que C# no tiene 'packages'- Tienen' namespaces' y 'assemblies'. Los paquetes son equivalentes a los espacios de nombres. Pero los ensamblajes se pueden comparar con los archivos JAR en Java. El modificador 'interno' hace que una clase solo sea accesible dentro de un ensamblaje. Como tal, no tiene nada que ver con espacios de nombres o paquetes. El paquete – nedR