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.
– Guifling