Una classe astratta può avere un costruttore?

Una classe astratta può avere un costruttore?

Se sì, come può essere usato e per quali scopi?

Soluzione

Sì, una classe astratta può avere un costruttore. Considerate questo:

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 superclasse Product è astratta e ha un costruttore. La classe concreta TimesTwo ha un costruttore che semplicemente codifica il valore 2. La classe concreta TimesWhat ha un costruttore che permette al chiamante di specificare il valore.

I costruttori astratti saranno spesso usati per far rispettare vincoli o invarianti di classe, come i campi minimi richiesti per impostare la classe.

NOTA: poiché non c'è un costruttore predefinito (o no-arg) nel genitore classe astratta, il costruttore usato nella sottoclasse deve chiamare esplicitamente il costruttore padre.

Commentari (8)

Sì, può avere un costruttore ed è definito e si comporta come qualsiasi altro costruttore di classe. Solo che le classi astratte non possono essere istanziate direttamente, ma solo estese, quindi l'uso è sempre da un costruttore di una sottoclasse.

Commentari (0)

Considera questo:

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 è astratta e ha un costruttore.

Commentari (3)