2012-04-12 16 views
7

Esto puede parecer una pregunta tonta, pero me gustaría conocer las "mejores prácticas" al crear métodos abstractos. ¿Debería su visibilidad ser pública o estar protegida?Visibilidad estándar para métodos abstractos

Aunque una clase secundaria que implementa el método abstracto será pública, ¿es aconsejable mantener el método abstracto protegido?

Respuesta

10

Depende de su caso de uso. Si el método abstracto solo implementa alguna parte de una funcionalidad mayor que está disponible en un método público en su clase abstracta, entonces probablemente debería estar protegido. Si se trata de un método independiente que puede/debe invocarse desde otra clase, hágalo público.

Ejemplos:

public abstract class Foo implements Closeable { 
    public final void close() { 
     // do whatever 
     doClose(); 
    } 

    protected abstract void doClose(); 
} 

public abstract class Bar { 
    public void read(byte[] b) { 
     for(int x = 0; x < b.length; x++) { 
      b[x] = read(); 
     } 
    } 

    public abstract int read(); 
} 
1

Supongo que depende de lo que hace el método. Si es algo que representa el comportamiento de clase (y subclases), debe ser público. Si el método que deben implementar las subclases es interno y lo utilizan otros métodos de la clase base (como definir una estrategia algorítmica), debe estar protegido.

2

Aquí está la diferencia de públicos, protegidos y privados:

Modifier

Para el método si se establece público al que se puede acceder a todas las clases dentro de todos los paquetes en su proyecto, si configuró protegido, solo se puede acceder a todas las clases dentro del mismo paquete o subclase que extiende la clase abstracta.

Por pregunta no. 2: Sí, lo es.

+3

Eso no es lo que preguntó. Preguntó cuáles eran las mejores prácticas para una clase abstracta, no para la definición de público/privado/protegido. –

+1

Sí, y él puede decidir qué quiere elegir público o protegido según mi explicación. – Crazenezz

Cuestiones relacionadas