Bonjour à tous !

Étant tout nouveau en java et sur le forum, je me pose une question qui peut peut-être sembler idiote ou bizarre.

En gros l'intérêt d'une interface est de définir ce qu'on va demander de faire aux objets issus d'une classe qui implémente cette interface.

Du coup, mettons que j'ai une superclasse Vehicule et des classes héritées Moto, Voiture, Tracteur, Batmobile et Kart
Et je me dis que j'aimerais que certains véhicules (mettons Batmobile et Kart) soient capables de lancer une attaque (la Batmobile peut lancer des missiles et le Kart des carapaces). Du coup je crée une interface du type
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
public interface Attaquant 
{
  public void attaquer();
}
et je modifie mes classes Batmobile et Kart pour
1 - modifier la déclaration et rajouter "implements Attaquant" (A partir de là, toute classe qui implémente Attaquant DOIT avoir une méthode attaquer() sinon Eclipse m'engueule)
2 - redéclarer et définir en leur sein la méthode this.attaquer();

Du coup je suis content.

Mais QUESTION: Si jamais je change d'avis et que je ne veux plus que le kart puisse attaquer, le fait de simplement supprimer l'implémentation d'Attaquant chez la classe Kart (en virant le "implements Attaquant") ne m'empêche pas d'appeler la méthode attaquer() définie au sein de la classe (je peux faire monKart.attaquer(); sans soucis).
Du coup, la création d'une interface m'oblige certes à implémenter des méthodes dans toute classe qui implémente mon interface, en revanche ELLE NE M'IMPOSE PAS DE SUPPRIMER CES METHODES DE MA CLASSE SI JE LUI DESIMPLÉMENTE MON INTERFACE (en virant le "implements Attaquant").

Savez-vous comment avoir cette "flexibilité" dans l'autre sens ?

Merci beaucoup pour votre lecture et vos réponses