Uma classe abstrata pode ter um construtor?

Uma classe abstrata pode ter um construtor?

Em caso afirmativo, como pode ser utilizado e para que fins?

Solução

Sim, uma classe abstrata pode ter um construtor. Considere isto:

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);
    }
}

A superclasse 'Produto' é abstrata e tem um construtor. A classe de concreto TimesTwo tem um construtor que apenas codifica o valor 2. A classe concreta TimesTwo tem um construtor que permite que o chamador especifique o valor.

Construtores abstratos serão freqüentemente usados para impor restrições de classe ou invariantes, tais como os campos mínimos necessários para configurar a classe.

NOTA: Como não existe um construtor por defeito (ou sem margem) na classe abstrata, o construtor utilizado na subclasse deve chamar explicitamente a construtora mãe.

Comentários (8)

Sim, ele pode ter um construtor e é definido e comporta-se como qualquer outro construtor de classe's. Exceto que classes abstratas podem't ser diretamente instanciadas, apenas estendidas, portanto o uso é sempre de um construtor de uma subclasse's.

Comentários (0)

Considere isto:

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;
    }
}

A superclasse é abstrata e tem um construtor.

Comentários (3)