Motivos para utilizar interfaces
Las interfaces permiten definir cómo un programa hará referencia a una o más clases. En una interfaz, puede definir métodos, atributos, tipos y constantes, como lo haría en una clase. Estos componentes forman una descripción de cómo un mandante programa podría interactuar con los objetos correspondientes. Sin embargo, una interfaz no puede instanciarse ni contiene implementaciones de sus métodos. Para conseguir que funcione el concepto, también hay una o varias clases que implementen la interfaz. Esto significa que incluyen la interfaz en su propia declaración de clase y los componentes que se declaran en la interfaz se convierten en parte de la propia clase. Si la interfaz contiene declaraciones de método, la clase que implementa la interfaz también debe proporcionar una implementación de esos métodos.

Las interfaces tienen dos importantes usos:
Proporcionar un enfoque unificado a diferentes clases: si tiene clases que no están relacionadas por herencia, pero que aún deben proporcionar servicios comunes a sus usuarios, puede definir los servicios comunes en una interfaz. De este modo se garantiza que cada clase proporcione un método con el mismo nombre y la misma firma para realizar una tarea concreta. Entonces, los programas que utilizan las clases tendrán una única manera de llamar funciones en particular, independientemente a qué clase están realmente dirigidos.
Proporcionar un enfoque simplificado a una clase compleja: Como verá más adelante, las interfaces proporcionan una vista restringida de un objeto. Esto le permite exponer un determinado conjunto de métodos a un programa que utilizará una clase determinada en función de las funciones que realmente requiere el programa.
Vea este ejemplo para saber cómo funciona una interfaz.
Definición de interfaz
La definición de una interfaz es muy similar a la sección de definición de una clase. Sin embargo, dado que una interfaz no tiene una implementación, no hay complemento de DEFINITION en la sentencia de INTERFACE. La segunda diferencia principal es que no hay secciones de visibilidad en una interfaz, puesto que todos los componentes de una interfaz son públicos. Las interfaces son últiles gracias a su interacción con otras clases, así que tener componentes no públicos no tendría sentido.

En la definición de la interfaz, puede utilizar clases, atributos, constantes y métodos y se permiten tanto componentes de instancia como estáticos. Recuerde que los métodos de interfaz tienen definición, pero no implementación. La clase de implementación proporcionará la implementación.
En muchos sentidos, las interfaces son similares a las súper clases abstractas. Proporcionan una técnica útil para casos en ls que necesita definir componentes comunes para clases que necesidad que de que exista una caso para herencia. En otras palabras, no hay ninguna relación clara "es un".
Implementación de la interfaz
Para implementar una interfaz en una clase, utilice la sentencia INTERFACES. Como todos los componentes de la interfaz son públicos y no puede modificar la visibilidad de un componente existente, deberá incluir la interfaz en la sección pública de la clase.

En cuanto haya escrito la sentencia INTERFACES, su programa será sintácticamente incorrecto. Esto se debe a que la interfaz contiene un método que aún no ha implementado. Puede utilizar una corrección rápida (Ctrl + 1) para añadir la implementación del método a su clase.
Al declarar una interfaz en una clase, debe implementar todos sus métodos.

En la implementación de su clase, debe implementar todos los métodos que se declaran en la interfaz. Al nombrar el método en la implementación, debe utilizar el nombre completamente cualificado, que consta del nombre de interfaz y el nombre del método unidos por una tilde. Esto se debe a que no hay ninguna garantía de que el nombre del método por sí mismo sea unívoco. Recuerde que los nombres de componente solo deben ser únicos en la clase o interfaz en la cual se declaran. En consecuencia, una clase podría declarar un método llamado get_partner_attributes, así como la interfaz lif_partner.