0
votes

Méthode d'interface Java en retrait de la sous-classe

Quelqu'un fournit une suggestion pour ci-dessous mentionné:

dans Java8 envisager une interface ayant deux méthodes (par exemple, interface1, interface 2) Mise en œuvre de ceux à plusieurs sous-classes plus tard, je souhaite supprimer une méthode interface1 de l'une de mes sous-classes sans affecter l'autre solution est une solution possible?


3 commentaires

Voulez-vous dire supprimer la méthode ne doit plus être disponible du tout sur la sous-classe?


Non, si vous implémentez une interface, vous disez fondamentalement "les instances de cette classe sont un nom d'interface $".


Cela me semble que vous avez besoin de regarder votre conception et de décider si votre classe est vraiment une mise en œuvre de l'interface. N'oubliez pas que le LSP dit que toutes les classes qui implémentent une interface doivent être interchangeables.


3 Réponses :


0
votes

Vous pouvez le faire en fournissant un Méthode par défaut Mise en œuvre pour la méthode code> interface1 code> dans l'interface elle-même.

interface Interface {
    default void interface1() {
        System.out.println("interface1");
    }

    void interface2();
}

class Clazz implements Interface {
    @Override
    public void interface2() {
        System.out.println("interface2");
    }
}


0 commentaires

1
votes

Si votre sous-classe déclare qu'il implémente cette interface, vous n'avez pas d'autre choix que de fournir des implémentations pour toutes les méthodes ou déclarez le résumé de la classe. Si vous voulez une classe de bétonnage qui ne pas implémente fonctionnellement toutes les méthodes de l'interface, voici une option: xxx

ici pendant que nous mettons en œuvre toutes les méthodes, Nous jetons une exception d'exécution si un appelant essaie d'accéder à méthodal2 () .


0 commentaires

0
votes

dépend de la manière dont vous définissez "Supprimer une méthode".

Si vous avez une interface p> xxx pré>

et par exemple deux sous-classes qui l'étendent: p>

 class Class1 implementes Interface, Interface1 {
     @Override
     public void interface1(){ ... }
     @Override
     public void interface2(){ ... }
 }
 class Class2 implementes Interface {
     @Override
     public void interface2(){ ... }
 }


0 commentaires