1
resposta

[Dúvida] Herança de uma classe para outra

Olá e boa noite!

Tenho tentado realizar a herança de uma classe para outra, como será esquematizado nos códigos abaixo:

package Animal;

public class animal {

    private static String nome;
    private static String cor;
    private static String ambiente;
    private static String comprimento;
    private static double veloMedia;
    private static int numdepatas;
    
public void RecebeAtributos() {
    this.nome = nome;
    this.cor = cor;
    this.ambiente = ambiente;
    this.comprimento = comprimento;
    this.veloMedia = veloMedia;
    this.numdepatas = numdepatas;
}

static boolean Dados(){
    
    System.out.println("Os dados registrados sobre o animal são: \nNome:" +
    nome + "\nCor: " + cor + "\nAmbiente: " + ambiente + "\nComprimento: " + comprimento
    + "\nVelocidade Média: " + veloMedia + "m/s" + "\nNúmero de patas: " + numdepatas);
        return true;
}

Essa é a classe "pai" e agora vou enviar as classes "filhas".

package Animal;

public class mamífero extends animal {

    private String alimento;
    
private void Atributos() {
    this.setNome(getNome());
    this.setAmbiente(getAmbiente());
    this.setNumdepatas(getNumdepatas());
    this.setVeloMedia(getVeloMedia());
    this.alimento = alimento;
}
static void dadosMamífero() {
    System.out.println("Esses são os dados do mamífero escolhido: " + "Nome: " 
            + getNome() + "Ambiente: " + getAmbiente() + "Número de patas: " 
            + getNumdepatas() + "Velocidade média: " + getVeloMedia());
}
package Animal;

import java.util.Scanner;

public class TestarAnimais extends animal {

    public static void main(String[] args) {

        mamífero Camelo = new mamífero();
        Scanner auxiliar = new Scanner(System.in);
        
        System.out.print("Olá, hoje vou ajudar a registrar seu animal!\n");
            Camelo.setNome("Camelo");
            Camelo.setAmbiente("Terrestre");
            Camelo.setCor("Amarelo");
            Camelo.setComprimento("2m");
            Camelo.setNumdepatas(4);
            Camelo.setVeloMedia(2.0);
            Camelo.setAlimento("Planta");
            
        System.out.print(dadosMamífero());	
    }

A questão que me fica, é que quando tento realizar o print na classe TestarAnimais, não consigo puxar o método "dadosMamífero()", alguém poderia me ajudar a entender como funciona e por que não está dando?

1 resposta

Olá Celso!

O problema que você está enfrentando está relacionado ao fato de que o método dadosMamífero() na classe mamífero é um método de instância (não estático) e você está tentando acessá-lo de forma estática na classe TestarAnimais. Para resolver esse problema, vamos fazer algumas alterações nos códigos:

  1. Na classe mamífero:
    • Remova o modificador static do método dadosMamífero() para que ele se torne um método de instância.
    • Como o método dadosMamífero() é um método de instância, você precisa criar uma instância da classe mamífero antes de chamar esse método.

A classe mamífero deve ficar assim:

package Animal;

public class mamífero extends animal {

    private String alimento;
    
    private void Atributos() {
        this.setNome(getNome());
        this.setAmbiente(getAmbiente());
        this.setNumdepatas(getNumdepatas());
        this.setVeloMedia(getVeloMedia());
        this.alimento = alimento;
    }

    // Método de instância para mostrar os dados do mamífero
    void dadosMamífero() {
        System.out.println("Esses são os dados do mamífero escolhido: " + "Nome: " 
                + getNome() + " Ambiente: " + getAmbiente() + " Número de patas: " 
                + getNumdepatas() + " Velocidade média: " + getVeloMedia());
    }
}
  1. Na classe TestarAnimais:
    • Crie uma instância da classe mamífero usando o construtor padrão.
    • Em vez de Camelo.setAlimento("Planta");, você pode usar o método Atributos() para configurar os atributos do mamífero.
    • Chame o método dadosMamífero() na instância do mamífero para exibir os dados.

A classe TestarAnimais deve ficar assim:

package Animal;

import java.util.Scanner;

public class TestarAnimais extends animal {

    public static void main(String[] args) {

        mamífero Camelo = new mamífero();
        Scanner auxiliar = new Scanner(System.in);

        System.out.print("Olá, hoje vou ajudar a registrar seu animal!\n");

        // Configurar os atributos do mamífero usando o método Atributos()
        Camelo.setNome("Camelo");
        Camelo.setAmbiente("Terrestre");
        Camelo.setCor("Amarelo");
        Camelo.setComprimento("2m");
        Camelo.setNumdepatas(4);
        Camelo.setVeloMedia(2.0);
        Camelo.Atributos(); // Chamar o método Atributos() para configurar os atributos adicionais
        Camelo.dadosMamífero(); // Chamar o método dadosMamífero() para exibir os dados
    }
}

Com essas alterações, o método dadosMamífero() deverá ser chamado corretamente na classe TestarAnimais, e você poderá visualizar os dados do mamífero.

Espero que isso resolva o problema. Se você tiver mais perguntas ou precisar de mais ajuda, sinta-se à vontade para perguntar!