Comme pour les classes, il y a une notion de sous-interface et d'héritage. Comme une interface déclare des méthodes, étendre une interface permet de déclarer des méthodes supplémentaires. Ceci se fait également au moyen du mot-clé extends :
interface I1 { ... } interface I2 extends I1 { ... }
On dit alors que I2 est une sous-interface directe de I1, ou qu'elle dérive de I1, et que I1 est une sur-interface directe de I2. L'effet de cette extension est que les déclarations de méthodes de I1 sont héritées par I23.2.
Une sous-interface d'une interface est considérée comme un sous-type de cette interface, ce qui permet d'utiliser une expression disposant de méthodes supplémentaires, là où seulement certaines de ces méthodes sont requises ; les affectations suivantes sont donc correctes :
I2 y = ...; I1 x = y;Dans ce cas, seules les méthodes déclarées par I1 pourront être invoquées sur x, alors que l'objet désigné par x implémente probablement d'autres méthodes. On dispose ainsi d'une notion d'abstraction graduelle.