Como usamos la palabra clave "predeterminada" como un especificador de acceso, y también se puede usar en declaraciones de cambio con un propósito completamente diferente, así que tuve curiosidad de que haya otras palabras clave en Java que se puedan usar en más de un propósito¿La misma palabra clave para dos propósitos en java?
Respuesta
default
se puede utilizar tanto en un interruptor y como valor predeterminado en una anotación (como lo señala Bozho)final
significa "no se puede derivar de/anulados" y "es de sólo lectura" que son dos diferentes - pero relacionados - significados (como se ha señalado por Jon)extends
puede ser utilizado tanto para especificar el supertipo de una clase y se puede utilizar en comodines y variables de tipo para poner una restricción (relacionado, pero no exactamente igual) (List<? extends Foo>
)super
puede usarse para especificar a algo en una superclase de la corriente clase, o en un comodín para poner una restricción (List<? super Foo>
)static
significa tanto "parte de la clase, no una instancia" (para los métodos, atributos o inicializadores) y comostatic import
class
declarar una clase (class Foo {}
), o para referirse a una clase literal (Foo.class
) (como respondidas por ILMTitan)- (
for
se puede utilizar en una normal para bucle y la "mejorado" para, pero eso es más como una sobrecarga (como Bozho pone tan bien) que realmente tiene dos significados)
No se puede usar default
como especificador de acceso, por lo que no creo que ni siquiera eso cuente. (EDITAR: Como señaló Bozho, se puede usar en anotaciones).
final
significa "no se puede derivar/sobreescribir" y "es de solo lectura", que son dos significados diferentes, pero relacionados.
La palabra clave default
no se utiliza como especificador de acceso. La ausencia de private
, protected
y public
significa el uso de default
.
Ejemplo:
class Test { // default access for class.
int A; // default access for the class member.
}
Algunos ejemplos de palabras clave de Java que encuentran uso diferente son:
final
: Unfinal
class
no puede tener subclases, un métodofinal
no puede ser cambiada, y unafinal
variable puede ocurrir a lo sumo una vez como una expresión de la mano izquierda.Super
: Se utiliza para acceder a los miembros de una clase heredada por la clase en la que aparece, también se utiliza para reenviar una llamada de un constructor a un constructor en la superclase.Static
: Se utiliza para crear bloques de inicializaciónstatic
, tambiénstatic
static
miembros y las importaciones.for
: Se utiliza para lafor
bucle convencional y el bucle más reciente de Java 1.5enhanced for
.
Esta es una buena agregación de todas las demás respuestas –
Si considera super para tener dos propósitos, entonces debe considerar 'this' tener al menos dos propósitos. – Yishai
El "default" en el caso de modificador de acceso no es una palabra clave - no se escribe:
default void doSomething()
Sin embargo, cuando se especifica el valor por defecto de un atributo de anotaciones - se es.
switch (a) {
default: something();
}
y
public @interface MyAnnotation {
boolean bool() default true;
}
Eso, junto con final
como se ha señalado por Jon Skeet parece cubrir todo. Tal vez, salvo la "sobrecarga" for
palabra clave:
for (initializer; condition; step)
y for (Type element : collection)
me dio un vistazo a java keywords pero parece que las palabras clave son únicos .. se puede comprobar usted mismo.
Por cierto default
no se puede utilizar como un especificador de acceso, se hereda cuando no se especifica ninguno.
Los static
métodos asociados de palabras clave y campos con una clase en lugar de las instancias de esa clase, sino que también se usa para significar secciones de inicialización estáticas como en:
public class MyClass
{
private static int a;
static
{
a = 1;
}
public static void doSomethingCool()
{
...
}
}
comentario de Pascal me recordaba a las importaciones estáticas:
import static MyClass.doSomethingCool;
public class MyOtherClass
{
public void foo()
{
// Use the static method from MyClass
doSomethingCool();
}
}
Plus static import (http://java.sun.com/j2se/1.5.0/docs/guide/language/static-import.html) –
@Pascal ooo, gracias, ¡Acabo de enterarme de eso recientemente! –
La palabra clave final
puede significar cosas diferentes.
- Cuando se modifica
classes
significa que la clase no se puede subclasificar. - Al modificar un
method
, significa que el método no puede ser anulado. - Al modificar un
variable
, significa que la variable no puede apuntar a ninguna otra variable.
¿Realmente utilizamos default
como especificador de acceso? Ningún especificador en absoluto es "predeterminado". Pero no usa la palabra clave de esa manera.
última tiene diferentes usos:
- en una declaración de variables que significa una variable no se puede cambiar.
- En una firma de método, significa que un método no puede ser anulado
- En una lista de parámetros, significa que una variable no puede ser alterada en un método.
En una lista de parámetros parecería ser lo mismo que una declaración de variable local. – Yishai
La palabra clave "extends" puede ser para herencia simple (implementación o "clase abstracta pura" también conocida como "herencia de interfaz" en Java).
La palabra clave "extends" también se puede usar para la herencia múltiple (interfaz).
Los que siempre argumentan que Java no es compatible con herencia múltiple tendrán, por lo tanto, dificultades para argumentar que "se extiende" en esos dos casos está haciendo exactamente lo mismo.
Ahora estoy en el otro campo: considero que la herencia de múltiples interfaces es herencia múltiple y esa herencia de implementación es solo un detalle de OOP (que no existe en el nivel OOA/OOD) y por lo tanto considero que " se extiende" que realmente está haciendo lo mismo en ambos casos y que, por tanto, mi respuesta no responder a la pregunta :)
pero es una palabra clave interesante de todas formas :)
Algo que nadie más ha mencionado aún: la palabra clave clase tiene dos usos diferentes.
La declaración de una clase:
class Test{};
e indicando una clase literal:
Class<Test> testClass = Test.class;
Se puede pensar en las siguientes cosas
- defecto
- finales
- súper
- ":" (colon) que se utiliza en diferentes lugares, lo cual tiene un significado diferente en diferentes lugares
Como todas las otras respuestas han dicho, hay muchas palabras clave que los propósitos múltiples servidores en función de contexto.Solo quería agregar que hay una razón para esto: hay una fuerte aversión a agregar palabras clave porque esas adiciones rompen el código existente, por lo que cuando se agregan nuevas características, las palabras clave existentes se usan si se ajustan razonablemente, como super y extends para genéricos y predeterminados para anotaciones, o simplemente se saltan como en los dos puntos usados en el bucle for mejorado.
Así que mi punto es esperar que a medida que el lenguaje continúa evolucionando, se encuentran aún más usos para las palabras clave existentes en lugar de introducir palabras nuevas.
BTW no existe un especificador de acceso en Java. El término en el JLS es 'modificador de acceso'.
- 1. agregando la misma clave dos veces en el Mapa
- 2. palabra clave foreach en java?
- 3. ¿Para qué es la palabra clave nativa en Java?
- 4. Java: cuándo utilizar la palabra clave 'this'
- 5. Java - utilizando la palabra clave 'super'
- 6. Utilizando la palabra clave 'this' en los constructores de Java
- 7. Gson Java palabra clave reservada
- 8. ¿Hay alguna palabra clave en Java que sea similar a la palabra clave 'AS' de C#
- 9. ¿Cómo puedo usar correctamente la palabra clave volátil en Java?
- 10. Palabra clave volátil en Java - Clarificación
- 11. esta palabra clave en android
- 12. ¿Cuándo utiliza exactamente la palabra clave volátil en Java?
- 13. ¿Cuándo debería usar la palabra clave "strictfp" en java?
- 14. ¿Qué significa la palabra clave "transitorio" en Java?
- 15. Equivalente de la palabra clave '#' de C# en Java
- 16. 5 formas de utilizar la palabra clave estática en Java
- 17. ¿Cuándo NO utilizar la palabra clave estática en Java?
- 18. Uso de la palabra clave "this" en java
- 19. El uso de esta palabra clave Java
- 20. Palabra clave final de Java para las variables
- 21. ¿Es nula una palabra clave Java?
- 22. palabra clave "nueva" en Scala
- 23. Aprendizaje de Java, uso de la palabra clave sincronizada
- 24. palabra clave privada vs no palabra clave privada
- 25. anidada sincronizada palabra clave
- 26. ¿Cuál es la palabra clave 'propia' de Java
- 27. conceptos básicos de Java sobre la palabra clave final
- 28. ¿La palabra clave Java sincronizada vacía el caché?
- 29. C# equivalente de la palabra clave Java 'implements'?
- 30. ¿Cómo se implementa la palabra clave "this" de java?
No puede usar 'default' como especificador de acceso. Simplemente no usa ningún especificador para obtener acceso predeterminado. –
Dupe de http://stackoverflow.com/questions/2402468/same-keyword-for-two-purposes-in-java –
Este es el original: se crearon dos engaños adicionales. –