Problem with the equals

Asked

Viewed 37 times

0

I have three classes, Pai, Filha1, Filha2. The classes Filha1 and Filha2 inherit from Pai, and each class has its own method equals, I want to make an Arraylist both of Filha1 and Filha2. As the two inherit from the same class this is possible, but when I try to use the method equals he of error.

Exception in thread "main" java.lang.Classcastexception: Teste.Filha2 cannot be cast to Teste.Filha1

Why did this happen ?

Code of the classes below:

Class Pai:

package Teste;

import java.time.LocalDate;

public abstract class Pai {
    private String nome;
    private LocalDate dataAniversario;

    public Pai(String nome, LocalDate dadaAniversario){
        this.nome = nome;
        this.dataAniversario = dadaAniversario;
    } 

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

    public void setDataAniversario(LocalDate dataAniversario) {
        this.dataAniversario = dataAniversario;
    }

    public String getNome() {
        return nome;
    }

    public LocalDate getDataAniversario() {
        return dataAniversario;
    }

    @Override
    public boolean equals(Object obj){
        Pai pai = (Pai) obj;
        return this.getDataAniversario().equals(pai.getDataAniversario()) && this.getNome().equals(pai.getNome());
    }
}

Class Filha1:

package Teste;

import java.time.LocalDate;

public class Filha1 extends Pai{

    private String corCabelo;

    public Filha1(String nome, LocalDate dadaAniversario, String corString) {
        super(nome, dadaAniversario);
        this.setCorCabelo(corCabelo);
    }

    public void setCorCabelo(String corCabelo) {
        this.corCabelo = corCabelo;
    }

    public String getCorCabelo() {
        return corCabelo;
    }

    public boolean equals(Object obj){
        Filha1 filha = (Filha1)obj;
        if (!super.equals(obj)) {
            return false;
        }
        return this.getCorCabelo().equals(filha.getCorCabelo());
    }
}

Class Filha2:

package Teste;

import java.time.LocalDate;

public class Filha2 extends Pai {

    private String corOlhos;

    public Filha2(String nome, LocalDate dadaAniversario, String corOlhos) {
        super(nome, dadaAniversario);
        this.setCorOlhos(corOlhos);
    }

    public void setCorOlhos(String corOlhos) {
        this.corOlhos = corOlhos;
    }

    public String getCorOlhos() {
        return corOlhos;
    }

    public boolean equals(Object obj){
        Filha1 filha = (Filha1)obj;
        if (!super.equals(obj)) {
            return false;
        }
        return this.getCorOlhos().equals(filha.getCorCabelo());
    }
}

Main of the application:

package Teste;

import java.time.LocalDate;
import java.util.ArrayList;

public class TesteClasses {

    public static void main(String[] args) {

        ArrayList<Pai> pai = new ArrayList<>();

        pai.add(new Filha1("Maria", LocalDate.of(1994, 01, 01), "Azul"));
        pai.add(new Filha1("lyly", LocalDate.of(1994, 01, 01), "Vermelho"));
        pai.add(new Filha2("ester", LocalDate.of(1994, 01, 01), "verdes"));

        Filha2 filha = new Filha2("ester", LocalDate.of(1994, 01, 01), "verdes");

        for (int i = 0; i < pai.size(); i++) {

            System.out.println(pai.get(i).equals(filha));
        }
    }

}
  • This is because in the equals you are converting Filha2 into Filha1, and Filha1 is a different class from Filha2.

No answers

Browser other questions tagged

You are not signed in. Login or sign up in order to post.