2010-04-13 11 views
6

Duplicar posible:
Java operator overloadJava no puede sobrecargar ningún operador. ¿Por qué?

en C++, podemos realizar la sobrecarga de operadores. Pero Java también es un lenguaje orientado a objetos. Entonces, ¿por qué Java no admite sobrecarga?

+7

La sobrecarga del operador no tiene nada que ver con el paradigma orientado a objetos. Es el lenguaje C++ azúcar. –

+3

MMmmm ... Es muy sabroso el azúcar del lenguaje C++. A veces me encuentro perdido en Java. –

+1

La sobrecarga es discutiblemente anti-OO. –

Respuesta

12

En realidad, admite la sobrecarga del operador ... de naturaleza muy limitada e incorporada. Por ejemplo, "+" está sobrecargado para String además de la aritmética habitual.

Por supuesto, la mayoría de la gente quiere saber por qué Java no es compatible con la sobrecarga del operador definida por el usuario. :-) La respuesta más simple parece ser que los creadores de Java no vieron, en ese momento, ninguna forma limpia de agregarlo al lenguaje sin hacer que Java fuera un desastre (como C++) en el proceso.

+0

¿No podría funcionar cualquier operador determinado (postfijo, prefijo o binario) como una función pero con una forma especial de usarlo? P.ej. 'a + b' es igual a' a.add (b) ' –

21

http://java.sun.com/docs/white/langenv/Simple.doc2.html

No hay medios previstos por el cual programadores pueden sobrecargar los operadores aritméticos estándar. Una vez más, los efectos de la sobrecarga del operador pueden ser con la misma facilidad que se logra al declarar una clase , variables de instancia apropiadas, y los métodos apropiados para manipular esas variables. La eliminación de la sobrecarga del operador permite una gran simplificación del código .

La última afirmación es, por supuesto, muy subjetiva.

+1

Básicamente es un argumento de complejidad de los creadores: la ganancia no vale la pena la complejidad adicional en sus mentes. – Ophidian

+0

nuevo enlace http://www.oracle.com/technetwork/java/simple-142616.html – amorenew

2

Tenga en cuenta que hay una anomalía en que el operador 'más' está sobrecargado para java.lang.String.

+0

Sobrecargado, no reemplazado. '+' también está sobrecargado para 'double + double', etc. –

+0

Doh. Re corregido. sobrecargado. Gracias. –

2

Es objetivos de diseño para hacer más sencillo que java C++

Queríamos construir un sistema que pudiera ser programado fácilmente sin una gran cantidad de entrenamiento esotérico, y que aprovechó la práctica estándar de hoy. Así que incluso aunque encontramos que C++ era inadecuado, diseñamos Java como cerca de C++ como sea posible para que haga que el sistema sea más comprensible. Java omite muchas funciones poco conocidas, entendidas y confusas de C++ que, en nuestra experiencia, aportan más duelo que beneficio.

desde aquí: The Java Language: An Overview

2

El código es más difícil de entender cuando se utiliza la sobrecarga de operadores en C++. Puede ser esa la razón por la cual los desarrolladores de Java decidieron no implementarlo. Realmente el código rico en operadores sobrecargados puede ser muy engañoso y difícil de leer, al igual que el código con un montón de macros.

1

Hace mucho tiempo, la noticia era que el equipo de Java miraba a otros idiomas (principalmente C++) y trataba de hacer una llamada de juicio sobre qué características de nivel de idioma incluir (o excluir) de Java.

La sobrecarga del operador era una gran nueva característica en C++ y muchos programadores en ciernes lo usaban para resolver problemas de maneras interesantes. Desafortunadamente, la mayoría de esas formas tenían errores, y pocos programadores sobrecargaban a los operadores de forma que eran "programables y portátiles". Como resultado, leer un programa a menudo echaría de menos que se haya introducido el código "mágico" en el operador "+" (u otra cosa). Fuera de los números (vectores, etc.) también tenías desacuerdos sobre lo que podría significar "+".

Así que la historia de portada (no sé si era cierto) era que el equipo de Java vio que se podía simplemente nombrar métodos sum.plus (...) y sería obvio que la llamada era al código escrito por el usuario (que podría estar sobrecargado) mientras que las operaciones reservadas "+", etc. solo harían lo que el lenguaje definía. Esto aumentaría algunos tipos de legibilidad del código a expensas de unas pocas palabras adicionales.

¿Es cierto, o es un intento de retroceder el historial con racionalizaciones? No lo sé. Tal vez los implementadores del lenguaje simplemente estaban ocupados tratando de hacer que Java funcionara y no se sobrecargaron a la sobrecarga del operador por fecha de lanzamiento. De cualquier manera, aumenta enormemente la legibilidad de Java en el 95% de todos los casos, a expensas de hacer que las matemáticas vectoriales sean un poco prolíficas.

Cuestiones relacionadas