Interfaces são classes assinaturas que determinam uma série de métodos que podem ser feitos com um quem a implementá-la. Como havia mencionado, interface são usadas para determinar tipos de dados. Uma classe pode implementar quantas interfaces desejar. Mas existem algumas considerações que devem ser consideradas.

interface IClass {
  return-type methodA();
  return-type methodB(int x);
}

Algumas pessoas usam o I no início para determinar que é uma interface. Você pode determinar métodos genéricos como methodA ou pode determinar métodos com uma certa assinatura obrigatória como methodB que necessita de um inteiro como parâmetro.

Em geral, todo método é declarado públic numa interface, mas é possível criá-lo privado.

class Class : IClass {
  methodA() {
    // sub-rotina
  }

  IClass.methodB(int x) {
    // bla bla bla...
  }

  methodC(int x) {
    IClass ic = this;
    ic.methodB(x);
  }
}

Class c = new Class();
c.methodA(); // call método A
c.methodB(x); // error
c.methodC(x); // call método C >> call método B

Como remover o conflito de duas interfaces que assinam o mesmo método?

Usando a implementação privada é possível resolver este problema, cria-se cada método privadamente, e cria funções diferentes para acesso de cada um deles.