Фактически, он поддерживает перегрузку операторов ... очень ограниченного, встроенного характера. Например, "+" перегружен для String в дополнение к обычной арифметике.
Конечно, большинство людей хотят знать, почему Java не поддерживает перегрузку определяемых пользователем операторов. :-) Самый простой ответ, по-видимому, заключается в том, что создатели Java в то время не видели какого-либо чистого способа добавить его в язык, не создавая при этом беспорядка в Java (например, C ++).
http://java.sun.com/docs/white/langenv/Simple.doc2.html
Нет никаких средств, с помощью которых программисты могут перегрузить стандарт арифметические операторы. Еще раз, эффекты перегрузки оператора могут быть так же легко достигнуты путем объявления класса , соответствующих переменных экземпляра, и соответствующих методов для управления {{ 1}} эти переменные. Устранение перегрузки оператора приводит к значительному упрощению кода.
Последнее утверждение, конечно, очень субъективно.
Когда-то давно появилась новость о том, что команда Java изучила другие языки (в первую очередь C ++) и попыталась сделать вывод о том, какие функции языкового уровня включать (или исключать) из Java.
Перегрузка операторов была большой новой функцией C ++, и многие начинающие программисты использовали ее для решения проблем интересными способами. К сожалению, большинство из этих способов содержало ошибки, и немногие программисты перегружали операторы способами, «переносимыми для программиста». В результате при чтении программы часто упускается из виду тот «волшебный» код, который был введен в операторе «+» (или в чем-то еще). Помимо чисел (векторов и т. Д.) У вас также были разногласия относительно того, что может означать «+».
Таким образом, прикрытие (не знаю, было ли это правдой) состояло в том, что команда Java увидела, что вы можете просто назвать методы sum.plus (...), и было бы очевидно, что это был вызов написанного пользователем кода (который может быть перегружен), в то время как зарезервированные операции «+» и т. д. будут делать только то, что определено языком. Это повысит удобочитаемость некоторых типов кода за счет нескольких дополнительных слов.
Так ли это, или это попытка наполнить историю рационализациями? Я не знаю. Возможно, разработчики языка просто были заняты, пытаясь заставить работать Java, и не удосужились перегрузить оператора по дате выпуска. В любом случае, это значительно увеличивает удобочитаемость Java в 95% случаев за счет того, что векторная математика становится немного многословной.
Цели проекта - сделать Java проще, чем C ++
Мы хотели создать систему, которую можно было бы легко программировать без большого эзотерического обучения и которая использовала бы сегодняшнюю стандартную практику. Таким образом, даже хотя мы обнаружили, что C ++ не подходит, мы разработали Java как можно как можно ближе к C ++, чтобы сделать систему более понятной. {{ 1}} В Java отсутствуют многие редко используемые, плохо понимаемые, сбивающие с толку функции C ++ , которые, по нашему опыту, приносят больше горя, чем пользы.
отсюда: Язык Java: Обзор
Обратите внимание, что есть аномалия в том, что оператор «плюс» перегружен для java.lang.String
.
Код сложнее понять, когда вы используете перегрузку операторов в C ++. Возможно, именно поэтому разработчики Java решили не реализовывать его. На самом деле код, богатый перегруженными операторами, может вводить в заблуждение и его трудно читать, как и код с большим количеством макросов.