Olá Laercio! Veja só, colocar uma classe como abstrata significa dizer que sua classe é um modelo, ela serve de modelo para outras classes e por isso ela não poderá ser instanciada, ou seja, não se poderá criar objetos dela. No seu caso está ocorrendo erro pelo motivo que o César disse. Quando aplicamos herança a única coisa que não é herdado de cada classe é o Construtor, pois todo construtor é especifico de cada classe. No entanto, toda subclasse pode chamar o construtor de sua superclasse.
Então o que você poderia fazer?
Você podia utilizar a solução do Cesar que irá funcionar perfeitamente. No entanto vou explicar o erro que ocorreu para que você decida qual solução deverá tomar.
Veja bem, como eu disse anteriormente em uma herança não se herda o construtor, apenas as classes filhas podem utilizar os construtores da classe pai utilizando super()
e passando como argumento os parâmetros necessários.
Mas eu sei que você pode se perguntar: "Mas porque se eu não utilizar nenhum construtor em minhas classes ele roda normalmente sem dar erro?"
Pelo seguinte fato, toda classe em Java herda da classe Objecte como eu disse anteriormente toda classe filha pode utilizar o construtor da classe pai. Por padrão em Java, quando criamos uma classe ela vem com um Construtor implícito. O construtor implícito nada mais é do que chamar o construtor da classe Object. Utilizando sua classe Conta o construtor implícito seria assim:
public Conta() {
super();
}
Ou seja, o construtor implícito nada mais é do que um construtor que chama o construtor da classe pai.
Mas o que acontece é que quando criamos um construtor para nossa classe, esse construtor implícito deixa de existir, passando a funcionar apenas o que criamos.
Então perceba o que foi o erro que está acontecendo em sua classe:
Sua classe ContaPoupanca está utilizando o Construtor Implicito logo ela ta chamando o construtor da classe pai, a classe Conta.
Mas a sua classe Conta agora tem um construtor criado por você que possui parâmetros por isso da erro. Pois super()
não funciona. O correto seria utilizar super(nome, agencia, saldo)
. mas por você está utilizando o construtor implícito da classe ContaPoupanca, não há como alterar e por isso ele chama super()
e da erro.
Uma forma de corrigir é como o César propôs. Você criar um construtor na sua classe ContaPoupanca assim o construtor implícito não existiria mais e nesse construtor criado você chamaria o construtor da sua classe pai.
Outra forma de resolver seria você recriar o construtor implícito na sua classe Conta, afinal uma classe pode ter mais de um construtor, ficando:
public Conta() {
super();
}
Assim, o construtor implicito de sua classe ContaPoupanca voltaria a funcionar.
Enfim utilizando o que o César disse está correto, espero ter ajudado! Bons Estudos!