Primeiro, você precisa entender de uma forma mais geral.
Uma interface é algo que mascara a complexidade de como funciona algo,facilitando a interação com ele, pois você nao precisa conhecer todo o funcionamento para saber utilizar.
veja o controle remoto, imagina vc entender como funciona cada circuíto daquele para conseguir aumenta o volume... você não precisa, porque existe uma interface que utiliza botões para isso. Eu estou mascarando a complexidade das placas de um controle remoto, para que as pessoas possam usar.
Entendendo disso, vamos aos tipos de interface que eu me lembro de cabeça aqui:
Interface de usuário - são comumente(mas não somente) chamadas das telas do sistema. Onde o usuário pode fazer uma ação e o software interpretar e realizar o comando, repare que ele(user) não precisa entender de programação, repare também que o programador não precisa saber todos os passos exatamente que o usuário fez. ele só precisa saber que ao user entrar em tal menu, e clicar em algo, deve realizar a ação de um código. Portanto, eu estou abstraindo a complexidade.
Interface física - Digamos que a gente tenha um celular com aquela entrada mais comum de fone de ouvido, e a gente tem o macho(do fone) e a fêmea( do celular), veja, eu posso ter um fone de 1988 que funciona em um celular de 2019, como isso é possível ? pela interface. o fabricante de celular não precisa saber exatamente como funciona aquele fone de 1988, assim como o cara que fez o fone não teria como saber como o celular funciona em 2019. Mas mesmo assim eles se comunicam. a interface física mascara a complexidade de como os dois funcionam e fazem os dois se comunicarem por meio de um conjunto de comandos e parametros. Eu só preciso conhecer eles(comandos e parametros), mas não como eles funcionam por dentro. A interface, neste caso, é fisica, pois é o conector e a entrada. Exemplos de interface física, usb, conector de energia, conector hdmi, vga...
interface em programação - ela segue a mesma lógica das demais. quando o professor explica, ele fala que é um "contrato" que o programador tem que seguir. Se você análisar, os outros exemplos também são contratos.
A interface serve, neste caso, para que o programador seja "obrigado" a criar as estrutura(métodos) que foram acordadas(via "contrato"). Toda vez que em java você "implements nome_da_interface", você obrigatoriamente precisa implementar aquele método, com os parametros acordados no "contrato" e o retorno do método acordado.
Note que agora, se eu tiver trabalhando em uma classe que implementa essa interface, eu não preciso saber como funciona por dentro do método cadastrar(String nome), eu só preciso saber que eu preciso passar o nome e que vc(a classe que você construiu usando a interface) me retorna true se for cadastrado, e false se não for.
Se vc parar para pensar, todos os outros exemplos se encaixam aqui, o cara que fez o celular, apenas conhece o método passarSom() e em alguns casos recebeSom() [microfone], o cara que fez o fone, sabe que quem quiser ouvir o som, vai ter que ouvir o som pelo método passarSom() e falar no mic usando o recebeSom(). ambos sabem que vão receber um sinal analógico(eu acho que funciona assim) e tem que transforma em digital, para que o fone e o celular entendam... mas ninguém sabe como o outro faz para passar o som, traduzir e fazer o user ouvir.
Você pode usar interface, por exemplo, para se comunicar com o sistema operacional, com a cpu... vc não precisar conhecer todas as cpu, nem saber binário para dar um comando para eles. Vc provavelmente tá usando uma interface para se comunicar é ai que tá a mágica :)