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

Ex 4 da aula Herança, reescrita e polimorfismo

Olá

não consegui entender por que nao consigo compilar o código abaixo. Dá o seguinte erro: Conta.java:46: error: non-static variable this cannot be referenced from a static context ContaCorrente cc = new ContaCorrente(); ^ Conta.java:47: error: non-static variable this cannot be referenced from a static context ContaPoupanca cp = new ContaPoupanca(); ^ Conta.java:44: error: Illegal static declaration in inner class Conta.TestaContas public static void main(String[] args) { ^ modifier 'static' is only allowed in constant variable declarations

Abaixo como deixei meu código:

class Conta
{
  protected double saldo;


  public void saca(double valor) 
  {
       this.saldo -= valor;
  }

 public void deposita(double valor) 
 {
     this.saldo += valor;
 }

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

    public double getSaldo() 
    {
    return this.saldo;
    }  

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

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

    }
    class TestaContas 
    {
    public static void main(String[] args) {
        Conta c = new Conta();
        ContaCorrente cc = new ContaCorrente();
        ContaPoupanca cp = new ContaPoupanca();

        c.deposita(1000); 
        cc.deposita(1000); 
        cp.deposita(1000);

        c.atualiza(0.01);
        cc.atualiza(0.01);
        cp.atualiza(0.01);

        System.out.println(c.getSaldo());
        System.out.println(cc.getSaldo());
        System.out.println(cp.getSaldo());

    }
}
}

Neste caso o "static" é preciso? Há coisas ainda que me confunde pois não tenho experiência em Java.

4 respostas

Oi João, tudo bem ?

Cara, imagino que você tenha feito isso em apenas um arquivo, estou enganado ?

Caso esteja certo, é legal que você separe cada classe em arquivos separados.

Tenta fazer esse teste e fala para gente se deu certo.

Abraços

OIJoão, você precisa ajeitar umas coisinhas no seu código. Quando você tiver criando classes no mesmo arquivo, elas precisam ficar uma fora da outra.

Então primeiro, você tem que fechar a chave ( } ) da classe conta e excluir a ultima chave do seu arquivo.

Segundo pro arquivo rodar pelo javac a classe que tiver o método main precisa ter o mesmo nome do arquivo java que você vai rodar então se código ficará assim:

class Conta{

  protected double saldo;

  public void saca(double valor){
       this.saldo -= valor;
  }

  public void deposita(double valor){
      this.saldo += valor;
  }

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

  public double getSaldo(){
      return this.saldo;
  }
}

class ContaCorrente extends Conta{

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

class ContaPoupanca extends Conta{

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

}
class TestaContas{

    public static void main(String[] args) {

        Conta c = new Conta();
        ContaCorrente cc = new ContaCorrente();
        ContaPoupanca cp = new ContaPoupanca();

        c.deposita(1000);
        cc.deposita(1000);
        cp.deposita(1000);

        c.atualiza(0.01);
        cc.atualiza(0.01);
        cp.atualiza(0.01);

        System.out.println(c.getSaldo());
        System.out.println(cc.getSaldo());
        System.out.println(cp.getSaldo());
    }
}

O nome do seu arquivo deve se chamar TestaContas.java

Ah e João diferente do C# as chaves abertas ( { ) ficam na mesma linha e não na linha de baixo. É uma convenção do Java

solução!

Opa.. desculpa a demora em responder.. só consigo de noite mesmo :) .. Obrigado Mateus e Vania. É isso mesmo Mateus.. fiz tudo junto .. mas segui também a dica da Vania não criando as classes dentro de uma unica classe, ou seja, separei a classe Conta, poupanca.. e funcionou beleza. Mas foi lapso de mimha parte por que no Java I eu vi realmente as classes sendo criadas separadas...mas beleza...é que não uso no dia-a-dia o Java...sempre esquece de alguma coisa...

Ah e quanto a "{" de fato me acostumei com o C# ... :) mas vou me lembrar da próxima vez..

Obrigado novamente Mateus e Vania.