Друзья,вопрос про ССЫЛКУ НА НЕСТАТИЧЕСКИЙ МЕТОД ЛЮБОГО ОБЪЕКТА(это один из 4 частных случаев) Сказано,что можно заменить реализацию интерфейса ссылкой на метод,ЕСЛИ этот метод возвращает ТОТ ЖЕ ТИП и имеет такое же КОЛЛИЧЕСТВО параметров.Окей,с этим утверждением я согласен. Только почему можно написать такую ссылку
" IntGenerator::next " ?
у этого же метода НОЛЬ параметров, а у
public int getNext(IntGenerator gen);
ОДИН параметр,значит нельзя использовать такую ссылку на метод
public interface Test{
        public int getNext(IntGenerator gen);
}


public class IntGenerator{
     public int next(){
            return 0;
      }
}
ВЕЗДЕ в инете один ответ(я его не понял и приведу контр пример): ссылка НА НЕСТАТИЧЕСКИЙ МЕТОД ЛЮБОГО ОБЪЕКТА
IntGenerator::next
будет являться реализацией указанного интерфейса , если в методе интерфейса
Test
public int getNext(IntGenerator gen);
тип первого параметра
IntGenerator gen
будет совпадать с типом класса
(IntGenerator)
, у которого мы вызовем ссылку на метод, ТАК КАК в методе int next() есть НЕЯВНЫЙ параметр
this
,который указывает на объект своего класса. Теперь чудесным образом у нас у обоих методов ЯКОБЫ совпадает количество входящих параметров
int next(IntGenerator this)
public int getNext(IntGenerator gen)
И тут можно было бы согласиться, НООО давайте посмотрим на это под другим углом, если в методе
int next(IntGenerator this)
есть неявная ссылка на объект текущего класса, тогда она должна быть и в методе класса,который реализует интерфейс
"Test"
public int getNext(Test this, IntGenerator gen)
ИЗ ЭТОГО СЛЕДУЕТ В ОДНОМ МЕТОДЕ 1 ПАРАМЕТР, А В ДРУГОМ ИХ 2(ДВА)!!!!!!!!!!!! Тогда почему мы можем использовать данную ссылку на метод, сигнатуры же ЯКОБЫ не совпадают!!!!