2010-10-03 12 views
18

È possibile definire una classe astratta privata in Java? Come può uno sviluppatore Java scrivere un costrutto come di seguito?Java: come implementare metodi astratti privati?

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

risposta

40

Non è possibile avere metodi private abstract in Java.

Quando un metodo è private, le sottoclassi non possono accedervi, quindi non possono sovrascriverlo.

Se si desidera un comportamento simile, è necessario il metodo protected abstract.

Si tratta di un errore di compilazione se una dichiarazione di metodo che contiene la parola chiave abstract contiene anche una delle parole chiave private, static, final, native, strictfp o synchronized.

E

Sarebbe impossibile per una sottoclasse implementare un metodo private abstract, perché private metodi non vengono ereditate dalle sottoclassi; quindi un tale metodo non potrebbe mai essere usato.


Risorse:

+3

Né in c. ...... –

+2

In realtà, i metodi privati ​​* possono * essere accessibili da sottoclassi - purché tali sottoclassi siano racchiuse da la super classe. – gustafc

+0

@gustafc, anche così, se la tua classe è racchiusa nella super classe hai due scelte, o questa classe è statica, quindi il metodo astratto non è accessibile (non da un ambiente statico), o la classe non è statica ma per avere un'istanza della sottoclasse hai bisogno di un'istanza della super classe che non sia istantanea (perché astratta) né estendibile dall'esterno. –

6

Questo sarebbe protected invece di private. Significa che solo le classi che estendono MyCommand hanno accesso ai due metodi. (Quindi fai tutte le classi dello stesso pacchetto, ma questo è un punto minore.)