2010-10-03 20 views
18

¿Es posible definir una clase abstracta privada en Java? ¿Cómo podría un desarrollador de Java escribir una construcción como la siguiente?Java: ¿cómo implementar métodos abstractos privados?

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

Respuesta

40

No puede haber private abstract métodos en Java.

Cuando un método es private, las clases secundarias no pueden acceder a él, por lo tanto no pueden anularlo.

Si quiere un comportamiento similar, necesitará el método protected abstract.

Es un error en tiempo de compilación si una declaración de método que contiene la palabra clave abstract contiene también una de las palabras clave private, static, final, native, strictfp, o synchronized.

Y

Sería imposible que una subclase para poner en práctica un método private abstract, porque private métodos no son heredados por las subclases; por lo tanto, tal método nunca podría ser utilizado.


Recursos:

+3

Ni en C# ...... –

+2

En realidad, se puede acceder a los métodos privados * por subclases, siempre que esas subclases estén delimitadas por la súper clase. – gustafc

+0

@gustafc, aun así, si su clase está encerrada en la superclase tiene dos opciones, esta clase es estática, luego el método abstracto no es accesible (no desde un entorno estático), o la clase no es estática pero para tener una instancia de la subclase, necesita una instancia de la superclase que no sea instanciable (porque es abstracta) ni extensible desde el exterior. –

6

Eso sería protected en lugar de private. Significa que solo las clases que se extienden MyCommand tienen acceso a los dos métodos. (Lo mismo ocurre con todas las clases del mismo paquete, pero ese es un punto menor.)

Cuestiones relacionadas