Problema com variáveis e herança

6 respostas
J

:?: Estou estudando java pelo livro Use a Cabeça Java…Com base nos primeiros capítulos elaborei esses códigos (anexados)
Mas estou com um problema com as variáveis de referencia, variaveis de métodos e com herança.

Após ler os anexos: O que posso fazer para resolver esse problema?

Ps: Não consegui adicionar uma imagem em tamanho adequado portanto decidi anexar um documento formato .rtf com o código das classes :oops:

6 Respostas

fmachado.dev

Boa tarde

você está usando alguma IDE para fazer isso? (NetBeans, Eclipse ou qualquer outra?)

//encapsulei…deveria ter feito isso?
sim, é sempre bom encapsular um campo, mas você tem que criar o get e set +/- assim

private String nome;
     //encapsulei...deveria ter feito isso? 
  public String getNome(){        
        return nomeAnimal;
  }
  public void setNome(String nome) {
       this.nome = nome;
  }
}

e da erro porque você tenta acessar a variável “nomeAnimal” de um objeto que é instancia de “dog”

public static void main(String[] args){
        dog one = new dog();
        one.nomeAnimal = "Brad";  
        one.lata();
     }
   }

ai, como os campos foram encapsulados, você tem que acessar assim

public static void main(String[] args){
        dog one = new dog();
        one.setNome("Brad");
        // e se quiser acessar essa variável você faz one.getNome();
        one.lata();
     }
   }

só umas dicas

  • nome de Classe começando sempre em maiúsculo (Animal, Dog) e, de preferência, no singular.
  • nome de variável: primeira palavra minúsculo e as demais com a primeira letra maiúscula (nomeAnimal, nomeCriatura, marcaCarro, etc…)
  • nome do método a mesma coisa da variável.

qualquer coisa estamos ai
abraços

isaiaspf

Na verdade acontece o erro porque você está tentando mudar o valor de um atributo de escopo privado (private).

Abraço.

J

:idea: Obrigado pelas dicas e respostas, deu tudo certo agora.
Realmente, estava me esquecendo dos set’s…
E sobre estar usando uma IDE: Sim, eu estou usando o NetBeans

Fexx

Em classe você deveria seguir a convenção de nomes de classes(iniciando com maiúscula), mas isso não vem ao caso.

Você está tentando atribuir um valor a um atributo com o modificador private, para que isso seja possivel vc teria que usa o encaplamento, metodos get e set.

public class Animais{
    //declarando
    private String nome;
    private double peso;
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public double getPeso() {
		return peso;
	}
	public void setPeso(double peso) {
		this.peso = peso;
	}
     //encapsulei...deveria ter feito isso? 
}

Classe Dog

public class Dog extends Animais{
    //metodo lata()
    public void lata(double pesoAnimal)
    {
        if(super.getPeso()< 3.000)
        {
            System.out.println("In, In, In");
        }
        else
        {
            if(pesoAnimal>=3.000 && pesoAnimal<7.000)
            {
                System.out.println("Au, Au, Au");
            }
            else
            {
                System.out.println("Ralf, Ralf, Ralf");
            }
        }
    }
}

Classe Teste

public class Teste{
    public static void main(String[] args) {
        Dog one = new Dog();
         one.setNome("Brad");
        
         System.out.println("Nome do animal : "+one.getNome());
    }
 }
J

Obrigado por todas as respostas. Elas foram bem úteis para a resolução do problema. :wink:

netooliveira33

/*

  • To change this template, choose Tools | Templates
  • and open the template in the editor.

public class animais{

private String nome;
private double peso=8.000;



public String getNome() {
    return nome;
}

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

public double getPeso() {
    return peso;
}

public void setPeso(double peso) {
    this.peso = peso;
}

}

//encapsulei...deveria ter feito isso?

/*

  • To change this template, choose Tools | Templates
  • and open the template in the editor.

public class dog extends animais{

//O problema foi que vc botou o peso animal por parametro do metodo lata como se algum dado fosse colocado dentro

//    do parametro dai eu tirei declarei detro do metodo e getei da animais e deu certo chapa agora é so me da 20 conto kkkkkkkkkkkkk

public void lata()

{

double pesoAnimal = getPeso();

if(pesoAnimal < 3.000)

{

System.out.println(in, in, in);

}

else

{

if(pesoAnimal>=3.000 && pesoAnimal<7.000)

{

System.out.println(Au, Au, Au);

}

else

{

System.out.println(Ralf, Ralf, Ralf);

}

}

}
}

public class tester extends dog

{

public static void main(String[] args){

new dog().lata();
}
}
Criado 20 de julho de 2011
Ultima resposta 21 de jul. de 2011
Respostas 6
Participantes 5