Solucionado (ver solução)
Solucionado
(ver solução)
8
respostas

Dúvida no Ex. 1 da Aula 2 - A IDE Eclipse

Criei uma classe ContaPoupanca e o "ContaPoupanca " fica grifaco como se estivesse dando error, o que posso

package br.com.nicolicontabil.alura;

public class Conta {
    protected double saldo;
    private String nome;
    private int agencia;

    public Conta(String nome, int agencia, double saldo) {
        this.nome = nome;
        this.agencia = agencia;
        this.saldo = saldo;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public int getAgencia() {
        return agencia;
    }

    public void setAgencia(int agencia) {
        this.agencia = agencia;
    }

    public double getSaldo() {
        return saldo;
    }

    public void impreme() {
        System.out.println(nome);
        System.out.println(agencia);
        System.out.println(saldo);

    }

    public void atualiza(double taxa) {
        this.saldo = this.saldo * taxa;

    }

    public void saca(double valorSaque) {
        if (this.saldo >= valorSaque) {
            this.saldo -= valorSaque;
        } else {
            System.out.println("Saldo insuficiente para saque");
        }

    }

}

br.com.nicolicontabil.alura;

public class ContaPoupanca extends Conta
{

    public void atualiza(double taxa){
        this.saldo += this.saldo * (taxa 2);
    }

}
8 respostas

Laercio , Boa tarde !

Para a classe ContaPoupanca extender de Conta , a classe Conta precisa ser abstrata

No seu exercicio a classe conta não é abstrata ! Para ser abstrata precisa utilizar a palavra reservada abstract

Espero ter ajudado , bons estudos

Então quando estava escrevendo o código na mão não deu problema, seria um problema da ide, veja o codigo

public class Conta{
    // Definição dos atributos
    protected double saldo = 0;

    public double getSaldo(){
        return this.saldo;
    }
    public void deposita(double valorDeposito) {
        this.saldo += valorDeposito;
    }
    public void saca(double valorSaque) {
        if (this.saldo >= valorSaque) {
            this.saldo -= valorSaque;
        } else {
            System.out.println("Saldo insuficiente para saque");
        }
    }
    public void atualiza(double taxa) {
        this.saldo += this.saldo * taxa;
    }
}

public class ContaPoupanca extends Conta {
    public void atualiza(double taxa) {
        this.saldo += this.saldo * taxa * 3;
    }
    public void deposita(double valor) {
        this.saldo += valor - 0.10;
    }
}

Laércio,

O que acontece é você implementou um construtor para sua class 'Conta' e como ContaPoupanca extends Conta, o eclipse está solicitando que crie um construtor também para sua classe ContaPoupanca. Como abaixo :

Exemplo :

public ContaPoupanca(String nome, int agencia, double saldo) {
        super(nome, agencia, saldo);
        // TODO Auto-generated constructor stub
    }

Normalmente clicando em cima do grifado e utilizar teclas crtl+1, o eclipse lhe dá soluções para resolver seu problema ou até lhe informa como resolvê-lo.

Espero ter ajudado. att

O correto seria fazer o que?

Colocar como abstrata, se for essa a resposta como faria isso Criar o construtor

Laercio,

a resposta do Cesar está correta , só vai ser preciso colocar o construtor .

me enganei na primeira resposta . desculpa .

mas adicionando construtor resolverá seu problema .

Então ficaria assim:

package br.com.nicolicontabil.alura;

public class ContaCorrente extends Conta {

public ContaCorrente(String nome, int agencia, double saldo) { super(nome, agencia, saldo); }

public void atualiza(double taxa) { this.saldo += this.saldo (taxa 2); } }

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!

solução!

Isso mesmo