Olá,
Em minha opinião, não se pode ver uma diferença clara entre interface e classe através da codificação: ambas têm atributos, métodos, eventos, etc.
Esses dois temas vêm da teoria do paradigma orientado a objetos. Na teoria OO, uma classe é um plano de um objeto do mundo real ou um tipo em seu programa que representa um objeto do mundo real. Digamos que você esteja escrevendo um software para uma universidade, então provavelmente terá em seu software uma classe Estudante, uma classe Curso, uma classe Funcionário, etc. Por outro lado, uma interface não representa um objeto no mundo real. Uma interface é um conjunto de operações que têm algumas conexões lógicas que sua classe deve ter para ampliar a capacidade do objeto.
Por isso as interfaces são incluídas nas classes.
Exemplo:
Você tem uma classe Rádio que representa um objeto real, um rádio.
Agora você quer criar um novo tipo de classe: Rádio Relógio. Um rádio relógio é um rádio com uma característica a mais do que um rádio comum. Como seu Rádio Relógio pode mostrar a hora, ele deve ter um conjunto de botões que um Rádio comum não tem para poder lidar com a capacidade da hora. Deve ter um botão SetHour() e também uma tela onde você possa ver a hora: GetHour(). Agora junte a hora e essas duas operações e você terá uma Interface:
Interface Relógio
Agora, para criar uma Classe Rádio Relógio você herda da classe Rádio e estende com a característica de relógio usando a Interface Relógio dentro da definição da classe Rádio Relógio e implementa esses dois métodos em sua implementação.
Espero que seja útil,
Eyal.