2010-07-02 8 views

Répondre

4

Les classes abstraites sont conçues pour être étendues, chaque constructeur provenant de l'enfant must perform a call to a constructor from the base class, vous avez donc besoin de constructeurs dans votre classe abstraite.

La classe abstraite est un squelette et n'a donc aucun sens de l'instancier directement puisqu'elle est encore incomplète (les enfants fourniront le reste).

2

Un exemple:

public abstract class BaseClass 
{ 
    private String member; 

    public BaseClass(String member) 
    { 
     this.member = member; 
    } 

    ... abstract methods... 
} 

public class ImplementingClass extends BaseClass 
{ 
    public ImplementingClass(String member) 
    { 
     /* Implementing class must call a constructor from the abstract class */ 
     super(member); 
    } 

    ... method implementations... 
} 
2

Nous pouvons utiliser un constructeur de classe abstraite pour exécuter du code qui est pertinent pour chaque sous-classe. Cette façon d'éviter le code en double

1

Les classes abstraites peuvent avoir des champs et des méthodes non abstraites (ce qui en fait un évaluateur de classe abstrait plutôt qu'une interface). Les champs doivent probablement être initialisés lorsqu'une classe qui l'étend est instanciée.

Avoir un constructeur dans la classe abstraite vous permet d'appeler super(foo); pour les initialiser au lieu de le faire directement