Number n = new Number(5)
es ilegal, pero Number n = 5
no lo es. ¿Por qué?Si el número de la clase es abstracto ¿por qué estoy autorizado a escribir el número n = 5?
Respuesta
Debido al autoboxing. 5
no es un objeto por lo que se envuelve en un objeto (Integer
en este caso), y Integer
es un Number
.
Fundamentalmente, es porque Number
es una clase abstracta - no es ningún constructor que corresponde a Number(5)
, e incluso si había aún así no sería capaz de crear una instancia de la clase directamente porque es abstracto.
Como explica Bombe, en su segundo caso realmente está creando un objeto Integer
* - que, como una subclase de Number
, se puede asignar a dicha variable. Y como es una clase concreta, puedes crear una instancia.
* Aunque en la práctica es en realidad más equivalente a Integer.valueOf(5)
, que en Sun JRE no creará un objeto Integer adicional sino que usará una versión combinada (como el patrón Flyweight).
¿por qué debe ser una clase estática? –
+1 tu respuesta es mucho mejor que la de Bombe, ni siquiera usó la palabra resumen en su respuesta, de eso se trataba la pregunta – whiskeysierra
@Carlos - Quise decir * clase concreta *, no estática; He solucionado este error tipográfico ("thinko"?), Gracias por señalarlo. AFAIK no existe una clase estática per se (ignorar las clases internas estáticas que son una cosa separada). –
No debería ser. el autoboxing es un gran error.
Tendría que estar en desacuerdo. int es el error. El lenguaje sería más simple, todo se definió como un Entero (o Largo o cualquier subclase de Número). Luego, permita que el compilador lo optimice en una primitiva (o cualquier primitiva). Por supuesto, tendría que manejar == de manera sensata . – MrJacqes
Es similar a cómo funcionaría el siguiente:
List bob = new ArrayList();
List es una interfaz, por lo que no puede crear una instancia directamente. Sin embargo, puede declarar una variable de tipo Lista y luego asignarle un objeto concreto que implemente esa interfaz. En la misma línea, puede declarar una variable de tipo Número y luego asignarle cualquier objeto de valor que sea una instancia concreta de ese tipo. Lo que han hecho con el código funcional es, para todos los efectos (debido a autoboxing):
Number n = new Integer(5);
- 1. Ruby: determine si un número es un número primo
- 2. ¿Cuál es el máximo número de métodos por clase .NET
- 3. ¿Cómo se verifica si un número es divisible por otro número (Python)?
- 4. Compruebe si el valor es un número
- 5. ¿Cómo verificar si el número es divisible por un cierto número?
- 6. jQuery: cómo contar el número de li's y agregar uno si el número es impar?
- 7. Por qué: ayudar a ignorar: establecer el número en .vimrc?
- 8. convertir número Peano s (n) de número entero en Prolog
- 9. XPath test si el valor del nodo es el número
- 10. Cuenta el número de ceros por fila y elimina las filas con más de n ceros
- 11. ¿Cómo vibrar el dispositivo n número de veces a través de la programación en Android?
- 12. ¿Cuál es la forma más rápida de generar el n-ésimo número de Motzkin?
- 13. Encuentra el número N-ésimo más frecuente en la matriz
- 14. ¿Determinar si el valor de JavaScript es un "número entero"?
- 15. Ruby round float to_int si el número entero es
- 16. por qué el emulador da el número IMEI 000000000000000
- 17. ¿Por qué el número ([]) === 0 y el número ({}) === NaN en Javascript?
- 18. ¿Cómo detectar si un número dado es un número entero?
- 19. ¿Por qué WebViewPage en MVC3 es abstracto?
- 20. Java, compruebe si el número entero es múltiple de un número
- 21. cómo comprobar si el carácter es un número entero
- 22. Ruby ordenar por booleano y el número
- 23. ¿Cómo encontrar el complemento de N de un número?
- 24. Pruebe si el valor es un número entero en Sass
- 25. Determine si el primer carácter de NSString es un número
- 26. verificación de Java si el número en el intervalo
- 27. Reducir el número de llamadas a getTableCellRendererComponent
- 28. MySQL Seleccione el número de entradas que aparecen "N" veces
- 29. Applescript; abrir una aplicación en el número Espacio N
- 30. ¿La notación de complemento a dos de un número positivo es el mismo número?
Para comprobar esto por sí mismo sólo tiene que añadir System.out.println (n.getClass() getName().); – Buhb
La pregunta era principalmente sobre clases abstractas. – whiskeysierra
No, se trataba de "cómo funciona' Number n = 5; 'si' Number' es abstracto? "Consulte más arriba para ver cómo funciona. :) – Bombe