2010-10-03 6 views
18

Est-il possible de définir une classe abstraite privée en Java? Comment un développeur Java pourrait-il écrire une construction comme ci-dessous?Java: comment implémenter des méthodes abstraites privées?

public abstract class MyCommand { 
    public void execute() 
    { 
     if (areRequirementsFulfilled()) 
     { 
      executeInternal(); 
     } 
    } 
    private abstract void executeInternal(); 
    private abstract boolean areRequirementsFulfilled(); 
} 

Répondre

40

Vous ne pouvez pas avoir les méthodes private abstract en Java.

Lorsqu'une méthode est private, les sous-classes ne peuvent pas y accéder, elles ne peuvent donc pas la surcharger.

Si vous voulez un comportement similaire, vous aurez besoin de la méthode protected abstract.

Il est une erreur de compilation si une déclaration de méthode qui contient le mot-clé abstract contient également une des mots-clés private, static, final, native, strictfp ou synchronized.

Et

Il serait impossible pour une sous-classe pour mettre en œuvre une méthode private abstract, car private méthodes ne sont pas héritées par les sous-classes; par conséquent, une telle méthode ne pourrait jamais être utilisée.


Ressources:

+3

Ni en C# ...... –

+2

En fait, on peut accéder aux méthodes privées * par sous-classes - tant que ces sous-classes sont entourées par la super classe. – gustafc

+0

@gustafc, même si votre classe est incluse dans la super classe vous avez deux choix, soit cette classe est statique, alors la méthode abstraite n'est pas accessible (pas à partir d'un environnement statique), ou la classe n'est pas statique mais pour avoir une instance de la sous-classe, vous avez besoin d'une instance de la super classe qui n'est pas instanciable (parce qu'elle est abstraite) ni extensible de l'extérieur. –

6

Ce serait protected au lieu de private. Cela signifie que seules les classes qui s'étendent MyCommand ont accès aux deux méthodes. (Donc faites toutes les classes du même paquet, mais c'est un point mineur.)

Questions connexes