Hola,
En mi opinión, no puedes ver una diferencia clara entre interfaz y clase a través de la codificación: ambas tienen atributos, métodos, eventos, etc.
Estos dos temas provienen de la teoría del paradigma orientado a objetos. En la teoría OO, una clase es un plano de un objeto del mundo real o un tipo en tu programa que representa un objeto del mundo real. Digamos que estás escribiendo un software para una universidad, entonces probablemente tendrás en tu software una clase Estudiante, una clase Curso, una clase Empleado, etc. Por otro lado, una interfaz no representa un objeto en el mundo real. Una interfaz es un conjunto de operaciones que tienen algunas conexiones lógicas que tu clase debe tener para ampliar la capacidad del objeto.
Por eso las interfaces se incluyen en las clases.
Ejemplo:
Tienes una clase Radio que representa un objeto real, una radio.
Ahora quieres crear un nuevo tipo de clase: ClockRadio. Un radio reloj es una radio con una característica más que una radio regular. Debido a que tu ClockRadio puede mostrar la hora, debe tener un conjunto de botones que una Radio regular no tiene para poder manejar la capacidad de la hora. Debe tener un botón SetHour() y también una pantalla donde puedas ver la hora: GetHour(). Ahora junta la hora y estas dos operaciones y obtendrás una Interfaz:
Interfaz Clock
Ahora, para crear una Clase ClockRadio heredas de la clase Radio y extiendes con la característica de reloj usando la Interfaz Clock dentro de la definición de la clase ClockRadio e implementas estos dos métodos en su implementación.
Espero que sea útil,
Eyal.