Una Clase es una especificación de cómo construir Objetos de la misma Clase . Es un tipo de plano o prototipo a partir del cual se crean Objetos individuales. Podemos decir que una Clase es una plantilla que describe los tipos de estado y comportamiento que los Objetos de su tipo soportan.
En términos de Programación Orientada a Objetos (POO), podemos decir que un coche Toyota es una instancia de la Clase de Objetos conocida como Coche. Una clase es como el plano de un coche. Usando este plano, puedes construir tantos coches como quieras. Cada coche que construyas es un objeto de la clase Coche. Cada coche también tiene un número, por supuesto. Si quieres decirle a alguien cuál es tu coche, le das el número para identificarlo. Este número se llama referencia del Objeto.
Una Interfaz proporciona un contrato que especifica cómo crear un Objeto, sin preocuparse de los detalles de cómo hacen las cosas. Una Interfaz es un tipo de referencia y sólo incluye miembros abstractos como Eventos, Métodos, Propiedades, etc. y no tiene implementaciones para ninguno de sus miembros.
Cuando una Clase implementa una Interfaz es obligada por el compilador a escribir los métodos y Propiedades que la Interfaz ha definido. Es decir, si implementas una Interfaz en tu Clase tienes que declarar todos los Eventos, Métodos y Propiedades de la Interfaz en tu Clase. Una interfaz sólo puede tener métodos abstractos y constantes, que siempre son implícitamente públicos, estáticos y finales.
Una clase tiene una definición y una implementación, mientras que una interfaz sólo tiene una definición.
Una clase puede ser instanciada, pero una interfaz no puede ser instanciada. Una Interfaz es sólo un conjunto de definiciones que debes implementar en tu Clase que hereda esa Interfaz.