Традиционное ООП подразумевает, что каждый метод находится только в одном классе, причём набор методов (и, конечно, членов) определяет класс, как таковой.
С другой стороны, объект, по отношению к которому вызван метод, это ни что иное, как первый (или нулевой) параметр функции, который передан в неё по ссылке.
То есть, понятие метода, по отношению к понятию функции, есть понятие о такой функции, у которой роль одного из параметров сильно отличается от ролей всех остальных параметров. Причём этот параметр всегда может быть только один.
С философской точки зрения совершенно непонятно, почему только один из параметров функции может играть особую роль.
Некузявость этой модели проявляется в определении оператора сложения в C++. Действительно, с одной стороны, сложение --- это одна из операций, которая может характеризовать класс (например, вектора или матрицы), то есть, это метод. С другой стороны, сложение требует двух равноправных аргументов, а, следовательно, оно не может только к одному из них относиться особенно.
Посему в Си+ сделано два способа определения таких операторов -- и как функции-члена и как функции-друга.
В Джаве операторов нет, но всё равно те же самые проблемы возникают, например, с методом Equals.
Ещё одно место, в котором возникает проблема -- документация. Обычно, все методы документированы в том классе, к которому они принадлежат. Соответственно, если какой-то метод, по логике, принадлежит к нескольким классам, то его хрен найдёшь.
Например, я сейчас пытаюсь понять, как в библиотеке HttpClient устанавливать прокси. Я нашёл класс HttpProxyHost extends HttpHost (в версии 4, я так понимаю, оставили только HttpHost). С точки зрения ООП это логично -- данные определённого вида инкапсулированы в свой объект.
И вот теперь мне надо найти, где же эта прокся устанавливается? Наверняка это один-единственный метод, в одном-единственном классе, который принимает эту HttpProxyHost. То есть, этот метод находится в особых отношениях с классом HttpProxyHost и должен был бы быть его членом... Но, он больше подошёл к другому классу и всё -- теперь не поймёшь, как устанавливать прокси...
