Всем доброго времени суток! Столкнулся со странным поведением, не могу понять в чем дело, по идее код аналогичный, но работает по разному.
Есть абстрактный класс AbstractCat
package animal;
import lombok.Data;
@Data
public abstract class AbstractCat {
private String name;
private Integer age;
}
у него есть наследник Cat
package animal;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
@Getter
@Setter
@ToString
public class Cat extends AbstractCat {
private String say;
}
аналогично им есть класс AbstractTransport его наследник Transport
package transport;
import lombok.Data;
@Data
public abstract class AbstractTransport {
private Integer rnum;
private String rtype;
}
package transport;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
@Getter
@Setter
@ToString
public class Transport extends AbstractTransport {
private Integer arrt;
private String where;
private String vehid;
private Integer rid;
private String lastst;
}
Бойлерплейт в каждом классе сгенерирован с помощью lombok, соответственно им же переопределены методы equls и hashcode так что родитель.equals(потомок) true, но почему то при сравнение в случае с Cat и AbstractCat они true, а Transport и AbstractTransport false, хотя классы аналогичны, почему такое поведение?
import animal.AbstractCat;
import animal.Cat;
import transport.AbstractTransport;
import transport.Transport;
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
animal();
System.out.println();
transport();
}
private static void animal() {
AbstractCat abstractCat = new AbstractCat() {
@Override
public void setName(String name) {
super.setName(name);
}
@Override
public void setAge(Integer age) {
super.setAge(age);
}
};
abstractCat.setAge(1);
abstractCat.setName("Cat");
Cat cat = new Cat();
cat.setAge(1);
cat.setName("Cat");
cat.setSay("Hello");
System.out.println("abstractCat.equals(cat) " + abstractCat.equals(cat));
}
private static void transport() {
AbstractTransport abstractTransport2 = new AbstractTransport() {
@Override
public void setRnum(Integer rnum) {
super.setRnum(rnum);
}
@Override
public void setRtype(String rtype) {
super.setRtype(rtype);
}
};
abstractTransport2.setRnum(33);
abstractTransport2.setRtype("М");
Transport transport1 = new Transport();
transport1.setRnum(33);
transport1.setRtype("M");
transport1.setWhere("dudl");
System.out.println("abstractTransport.equals(transport1) " + abstractTransport2.equals((Transport)transport1));
System.out.println("transport1.equals(abstractTransport) " + transport1.equals(abstractTransport2));
}
}
Вывод:
abstractCat.equals(cat) true
abstractTransport.equals(transport1) false
transport1.equals(abstractTransport) false
Подскажите, кто знает?
Заранее Спасибо!
└── src
├── main
│ ├── java
│ │ ├── animal
│ │ │ ├── AbstractCat.java
│ │ │ └── Cat.java
│ │ ├── Main.java
│ │ └── transport
│ │ ├── AbstractTransport.java
│ │ └── Transport.java
│ └── resources
└── test
├── java
└── resources