Classe Abstrata

Amigos,
Seguinte,
Posso ter um construtor em uma classe abstrata, mas não posso instanciala, então porque do construtor ?
Obrigado.

Para que uma classe concreta que herde da sua classe abstrata possa herdar também os métodos abstratos e ter a sua própria implementação. [editado após resposta do sergiotaborda]

[quote=Wilhans]Amigos,
Seguinte,
Posso ter um construtor em uma classe abstrata, mas não posso instanciala, então porque do construtor ?
Obrigado.[/quote]

Lá porque a classe não é instanciada não quer dizer que ela não é construida.
O construtor faz parte de um processo que constroi a classe de um certo tipo. Se essa classe herda de outras, essas outras tb têm que ser construidas.

O constutor não é herdável, não se pode sobreescrever nem redefenir.

Bem, vamos a um exemplo:

[code]class abstract Abstrata {
public Abstrata() {
System.out.println(“Abstrata…”);
}
}

class Concreta extends Abstrata {
public Concreta() {
System.out.println(“Concreta…”);
}

public static void main(String[] args) {
    new Concreta();
}

}[/code]

A saída desse código será:

Abstrata…
Concreta…

Por que quando a classe Concreta é instanciada, seu construtor é executado, e na primeira linha do seu construtor, há uma chamada implícita ao construtor da classe Abstrata.

T+

Wilhans tenha em mente que usamos classes abstratas para representar objetos genéricos, como Contato, Pessoa, Animal ou algo que possa ser representado genéricamente.
Mas mesmo sem um “instância” da classe podemos chamar seu construtor(meio confuso isso neh).
Por isso que herdamos classes abstratas, e na implementação do seu construtor podemos passar parâmetros de construção.

Não se esqueça do super()…

o construtor existe pq uma class abstract faz parte da herança java.lang.Object, caso contrario nao teria um construtor como as interfaces… entao tudo que pertence a Object implicitamente tem um construtor. Dar uma pesquisada nas regras como funciona o contrutor quando envolve herança… a subclass sempre chama o construtor da super e por ai vai ate chegar a Object.
E nao se tem uma instancia de abstract por motivos logicos… vc consegue pegar “Animal”? Não mais vc consegur pegar/tocar “cachorro” que É-UM Animal… entendeu o motivo de classes abstract nao ter instancia?ja que instancia se refere a algo concreto… no mundo real, algo que eu, e vc pode tocar…
:smiley: