Como funciona a conversão de referência de método?

public class Main {
    interface Capitalizer {
        public String capitalize(String name);
    }

    public String toUpperCase() {
        return "ALLCAPS";
    }

    public static void main(String[] args) {
        Capitalizer c = String::toUpperCase; //This works
        c = Main::toUpperCase; //Compile error
    }
}

Ambos são métodos de instância com a mesma assinatura. Por que um funciona e o outro não?

Assinatura deString::toUpperCase: String toUpperCase();

questionAnswers(3)

yourAnswerToTheQuestion