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

ENVIO DESAFIO 1 - E NOS DESAFIOS Ñ OBRIGAT. 2 E 3-APARECE 'NULL' NO LUGAR DA VARIÁVEL NO CASTING

Olá, envio os dois primeiros desafios mas no segundo (Fazer o Casting de Cachorro para Animal), o get.interação não retorna o valor atribuido a ele (brinca). Peço orientação por favor. Agradeço muito. O desafio 1 criei com uma classe Palavra embora o exercicio não tenha pedido.

import br.com.alura.Screenmatch6.um.Palavra;
import java.util.ArrayList;

public class LODPrincipalUm {
    public static void main(String[] args) {
        Palavra palavra1 = new Palavra();
        palavra1.setTrecho("Estou");
        Palavra palavra2 = new Palavra();
        palavra2.setTrecho("estudando");
        Palavra palavra3 = new Palavra();
        palavra3.setTrecho("Java");
        System.out.println("As 3 palavras formam a frase: " + palavra1.getTrecho() + " " + palavra2.getTrecho() + " " + palavra3.getTrecho());

        ArrayList<String> listaStrings = new ArrayList<>();
        listaStrings.add("Estou");
        listaStrings.add("estudando");
        listaStrings.add("Java");
        for (String palavra : listaStrings) {
            System.out.println(palavra);
    }
    }
}
package br.com.alura.Screenmatch6.um;
public class Palavra {
    private String trecho;
    public String getTrecho() {
        return trecho;
    }
    public void setTrecho(String trecho) {
        this.trecho = trecho;
    }
    }

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

package br.com.alura.Screenmatch6.doisetres;
import java.util.ArrayList;

public class LODPrincipalDoiseTres {
    public static void main(String[] args) {
        Cachorro cachorro = new Cachorro("late", "brinca");
        Animal animal = new Animal("Mia", "miau");

        ArrayList<Animal> oQuefaz = new ArrayList<>();
        oQuefaz.add(animal);
        oQuefaz.add(cachorro);
        for (Animal faz : oQuefaz) {
            if (faz instanceof Cachorro){
                System.out.println("O cachorro " + cachorro.getAcao() + " e " + cachorro.getInteracao());
            }
        }
    }
}
package br.com.alura.Screenmatch6.doisetres;

public class Animal {
    private String acao;
    private String som;
    public Animal(String acao, String som){
        this.acao = acao;
        this.som = som;
    }
    public String getAcao() {
        return acao;
    }
    public String getSom() {
        return som;
    }
}
package br.com.alura.Screenmatch6.doisetres;

public class Cachorro extends Animal{
    private String interacao;
    public Cachorro(String acao, String interacao) {
        super(acao, interacao);
    }
    public String getInteracao() {
        return interacao;
    }
    public void setInteracao(String interacao) {
        this.interacao = interacao;
    }
}

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

2 respostas

Olá Ana, tudo bem?

O problema está na classe Cachorro. Quando você chama o construtor da classe Cachorro, você está passando a string "brinca" como o segundo argumento, mas isso está sendo atribuído ao campo som da classe Animal, não ao campo interacao da classe Cachorro.

Para corrigir isso, você precisa ajustar o construtor da classe Cachorro para garantir que o campo interacao seja corretamente inicializado. Aqui está a correção:

package br.com.alura.Screenmatch6.doisetres;

public class Cachorro extends Animal {
    private String interacao;

    public Cachorro(String acao, String som, String interacao) {
        super(acao, som);
        this.interacao = interacao;
    }

    public String getInteracao() {
        return interacao;
    }

    public void setInteracao(String interacao) {
        this.interacao = interacao;
    }
}

E então, no seu método main, você deve ajustar a criação do objeto Cachorro para passar três argumentos:

package br.com.alura.Screenmatch6.doisetres;

import java.util.ArrayList;

public class LODPrincipalDoiseTres {
    public static void main(String[] args) {
        Cachorro cachorro = new Cachorro("late", "som", "brinca");
        Animal animal = new Animal("Mia", "miau");

        ArrayList<Animal> oQuefaz = new ArrayList<>();
        oQuefaz.add(animal);
        oQuefaz.add(cachorro);

        for (Animal faz : oQuefaz) {
            if (faz instanceof Cachorro) {
                Cachorro dog = (Cachorro) faz;
                System.out.println("O cachorro " + dog.getAcao() + " e " + dog.getInteracao());
            }
        }
    }
}

Note que agora estamos passando três argumentos ao criar o objeto Cachorro e fazendo o casting correto dentro do loop for. Você tem que passar o argumento do som para o construtor de Cachorro porque no construtor de Animal é pedido, e como Cachorro herda Animal ele precisa passá-lo, se não causa uma situação como a sua.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.
solução!

Oiii Armano!

Que esplicação ótima você deu! Não entendia direito como passar os atributos da própria classe no construtor, junto com os atributos da classe "mãe", mas!... lógico! ficou bem claro agora. As variáveis 'ação' e 'som' são da super classe Animal e a variavel 'interação' é da classe Cachorro que herda da "super" (Animal). Então ao passar 'ação e som' na subclasse Cachorro (somente elas eu referencio entre parenteses após o termo "super"). E a variavel da sub classe Cachorro 'interação' eu referencio com o "this. =" Poxa, muito obrigada mesmo! Muito bem detalhada a explicação! Deu certo!! Pude usar as duas variáveis da classe mãe (Animal) e variavel da sub classe (Cachorro) para formar a frase completa como eu queria.

Insira aqui a descrição dessa imagem para ajudar na acessibilidade