2010-11-17 15 views
42

Tengo que crear muchas clases muy similares que tienen un solo método diferente entre ellas. Así que pensé que crear una clase abstracta sería una buena forma de lograr esto. Pero el método que quiero anular (por ejemplo, el método foo()) no tiene un comportamiento predeterminado. No quiero mantener ninguna implementación predeterminada, obligando a todas las clases extendidas a implementar este método. ¿Cómo hago esto?Cómo forzar a un método a ser anulado en Java?

+0

Suena como una implementación del Patrón de método de plantilla http://en.wikipedia.org/wiki/Template_method_pattern – Robin

+1

Esta es una excelente pregunta para los casos en los que desea que TODAS las subclases llamen a su padre. Las respuestas hasta ahora parecen no haber considerado ese caso. Ejemplo: asegúrese de que un método debe anularse en cada clase y llamar al padre: '@override protected void importantMethod() {super.importantMethod(); ...} ' – will

Respuesta

69

Es necesario un método abstracto en su clase base:

public abstract class BaseClass { 
    public abstract void foo(); 
} 

De esta manera, no se especifica un comportamiento predeterminado y se fuerza clases no abstractos heredando de BaseClass para especificar una implementación para foo.

+9

su clase base' BaseClass' ** debe ** ser abstracta. –

+0

@The Elite Gentleman: ¡sí! ¡Gracias! arregló eso. –

+3

¡ah! Estaba bajo el concepto erróneo de que las clases abstractas no pueden tener métodos no abstractos. ¡Gracias! –

9

Simplemente haga el método abstracto.

Esto obligará a todas las subclases a implementarlo, incluso si se implementa en una superclase de la clase abstracta.

public abstract void foo(); 
+0

Gracias por mencionar el escenario de la superclase –

4

Realice este método abstract.

5

Si usted tiene una clase abstracta, a continuación, hacer que su método (digamos que foo abstracta así)

public abstract void foo(); 

A continuación, todas las subclases tendrá que anular foo.

Cuestiones relacionadas