Por que uma referência de método Java com tipo de retorno corresponde à interface do Consumidor?

Estou confuso com o seguinte código

class LambdaTest {
    public static void main(String[] args) {
        Consumer<String>         lambda1 = s -> {};
        Function<String, String> lambda2 = s -> s;

        Consumer<String>         lambda3 = LambdaTest::consume; // but s -> s doesn't work!
        Function<String, String> lambda4 = LambdaTest::consume;
    }

    static String consume(String s) { return s;}
}

Eu esperava que a atribuição do lambda3 falhasse, pois meu método de consumo não corresponde ao método de aceitação na Interface do Consumidor - os tipos de retorno são diferentes, String vs. nulo.

Além disso, eu sempre pensei que existe um relacionamento individual entre expressões Lambda e referências a métodos, mas esse claramente não é o caso, como mostra meu exemplo.

Alguém poderia me explicar o que está acontecendo aqui?

questionAnswers(2)

yourAnswerToTheQuestion