Une classe abstraite peut-elle avoir un constructeur ?

Une classe abstraite peut-elle avoir un constructeur ?

Si oui, comment peut-il être utilisé et à quelles fins ?

Solution

Oui, une classe abstraite peut avoir un constructeur. Considérez ceci :

abstract class Product { 
    int multiplyBy;
    public Product( int multiplyBy ) {
        this.multiplyBy = multiplyBy;
    }

    public int mutiply(int val) {
       return multiplyBy * val;
    }
}

class TimesTwo extends Product {
    public TimesTwo() {
        super(2);
    }
}

class TimesWhat extends Product {
    public TimesWhat(int what) {
        super(what);
    }
}

La super-classe Produit est abstraite et possède un constructeur. La classe concrète TimesTwo a un constructeur qui ne fait que coder en dur la valeur 2. La classe concrète TimesWhat a un constructeur qui permet à l'appelant de spécifier la valeur.

Les constructeurs abstraits seront fréquemment utilisés pour faire respecter des contraintes ou des invariants de classe, tels que les champs minimums requis pour configurer la classe.

NOTE : Comme il n'y a pas de constructeur par défaut (ou no-arg) dans la classe parente

classe abstraite, le constructeur utilisé dans la sous-classe doit explicitement appeler le constructeur du parent.

Commentaires (8)

Oui, elle peut avoir un constructeur, qui est défini et se comporte comme le constructeur de toute autre classe. Sauf que les classes abstraites ne peuvent pas être directement instanciées, mais seulement étendues, et que l'utilisation se fait donc toujours à partir du constructeur d'une sous-classe.

Commentaires (0)

Considérez ceci :

abstract class Product { 
    int value;
    public Product( int val ) {
        value= val;
    }
    abstract public int multiply();
}

class TimesTwo extends Product {
    public int mutiply() {
       return value * 2;
    }
}

La superclasse est abstraite et possède un constructeur.

Commentaires (3)