Java从子类获取String

Fav*_*las 0 java class

想象一下,我有这个:

public class Animal {
    private String racaAnimal;
    private String corAnimal;

    public String getCorAnimal() {
        return this.corAnimal;
    }

    public String getRacaAnimal() {
        return this.racaAnimal;
    } 

            public Animal getAnimaisCliente(int indice) {
                    return this.animaisCliente[indice];
            }  
}

public class Estimacao extends Animal{
    private String nomeAnimal;

    public String getNomeAnimal() {
        return nomeAnimal;
    }
}

public class Cliente{
    private Animal[] animaisCliente;
}
Run Code Online (Sandbox Code Playgroud)

构造者没有展示,但他们工作正常.

我有一个支持所有Cliente的arraylist

ArrayList<Cliente> clientes = new ArrayList<Cliente>();
Run Code Online (Sandbox Code Playgroud)

并且像这样创造动物

Estimacao animaisEstimacao = new Estimacao(nomeAnimal,racaAnimal,corAnimal);
Run Code Online (Sandbox Code Playgroud)

然后它添加到Cliente中的Animal数组中

现在,如果我这样做:

System.out.println(" Raça: " + clientes.get(0).getAnimaisCliente(0).getRacaAnimal());
Run Code Online (Sandbox Code Playgroud)

有用.但是我如何从Estimacao类中获得nomeAnimal?

如果我放

System.out.println(" Nome: " + clientes.get(0).getAnimaisCliente(0).getNomeAnimal());
Run Code Online (Sandbox Code Playgroud)

它不起作用.

从一个子类我们可以从超类中获取东西,但另一方面是arroud?可能吗?

Gui*_*ume 5

你需要投你AnimalEstimacao.但显然,如果您不想冒异常风险,请确保您之前Animal是正确的类:

Animal animal = clientes.get(0).getAnimaisCliente(0);
if (animal instanceof Estimacao) {
    System.out.println(" Nome: " + ((Estimacao) animal).getNomeAnimal());
}
Run Code Online (Sandbox Code Playgroud)