¿Cómo funciona el método de fundición de referencia?

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 son métodos de instancia con la misma firma. ¿Por qué uno funciona y el otro no?

Firma deString::toUpperCase: String toUpperCase();

Respuestas a la pregunta(3)

Su respuesta a la pregunta