继承对象的Java equals()方法
这是我的密码:继承对象的Java equals()方法,java,Java,这是我的密码: class Car { Piece doors; Piece window; String name; List<Sign> signs; //??? Car() { } @Override public String toString() { //... } @Override public boolean equals(Object other) {
class Car {
Piece doors;
Piece window;
String name;
List<Sign> signs; //???
Car() {
}
@Override
public String toString() {
//...
}
@Override
public boolean equals(Object other) {
if (this == other) {
return true;
}
if (other == null || other.getClass() != this.getClass()) {
return false;
}
if (this.doors == other.doors && this.window == other.window ) {
return true;
}
return false;
}
}
class Piece extends Car {
Piece() {
//...
}
}
class Brand extends Car {
Brand(String name, Sign[] signs) {
this.name = name;
this.signs = signs;
}
List<Sign> signs() {
return this.signs;
}
}
等级车{
单件门;
片窗;
字符串名;
列出标志;/???
汽车(){
}
@凌驾
公共字符串toString(){
//...
}
@凌驾
公共布尔等于(对象其他){
if(this==其他){
返回true;
}
if(other==null | | other.getClass()!=this.getClass()){
返回false;
}
if(this.doors==other.doors&&this.window==other.window){
返回true;
}
返回false;
}
}
类件延伸车{
件(){
//...
}
}
一流品牌延伸汽车{
品牌(字符串名称,符号[]符号){
this.name=名称;
这个符号=符号;
}
列表标志(){
把这封信还给我;
}
}
这是我的班级结构。现在,我想知道,两个比较对象是否相等。假设我们有两件物品。如何在方法Car.equals()中比较它们?这里的问题是如何找到该对象是属于Piece还是Brand子类。Piece不应该扩展Car,但Car应该由诸如Window、Door等Piece对象组成。一个片段应该实现equals/hashcode。尽管让接口显式定义这些函数并不意味着继承的类需要它,但它仍然暗示它是必要的(请参阅Comparator) equals合同要求引用的成员为最终成员,以满足合同要求。Brand overrides equals/hashcode用于比较品牌名称 门窗需要定义最终成员,使其真正独特,但遗憾的是,问题中没有提供任何成员
静态级轿车{
私人成品门;
私人最终作品窗口;
私人最终品牌;
私有最终整数哈希码;
汽车(件门、件窗、品牌){
这个。门=门;
this.window=窗口;
这个品牌=品牌;
this.hashCode=Objects.hash(门、窗、品牌);
}
@凌驾
公共int hashCode(){
返回哈希码;
}
@凌驾
公共布尔等于(对象obj){
如果(obj==此){
返回true;
}
if(汽车的obj实例){
车辆其他车辆=(车辆)obj;
返回otherCar.doors.equals(doors)和otherCar.window.equals(window)和otherCar.brand.equals(brand);
}
返回false;
}
}
静态类窗口实现了一个{
@凌驾
公共int hashCode(){
返回super.hashCode();
}
@凌驾
公共布尔等于(对象obj){
返回super.equals(obj);
}
}
静态类门器件{
@凌驾
公共int hashCode(){
返回super.hashCode();
}
@凌驾
公共布尔等于(对象obj){
返回super.equals(obj);
}
}
接口件{
布尔等于(对象其他);
int hashCode();
}
静态类品牌{
私有最终字符串名;
私有最终整数哈希码;
品牌(字符串名称){
this.name=名称;
this.hashCode=Objects.hash(名称);
}
@凌驾
公共布尔等于(对象其他){
如果(其他==此){
返回true;
}
if(品牌的其他实例){
品牌其他品牌=(品牌)其他;
返回otherBrand.name.equals(name);
}
返回false;
}
@凌驾
公共int hashCode(){
返回哈希码;
}
}
您在片段
的车内
使用合成和继承,我想您可能有点困惑。汽车
有一个零件
,零件
不是汽车
。我认为这应该只使用构图。这辆车看起来不对劲。你是否打算允许使用Car=new-Piece()代码>然后car.drive()代码>(或者汽车应该能做的事情)?关于Brand extends Car
也一样。你应该在你的工件实例上调用equals,不要使用==比较它们。你的模型有点奇怪。与现实生活类似,汽车是由零件制成的,并且有品牌。在您的车型中,件
和品牌
都是汽车。您是否希望车轮上有门
和窗
?您可以在它们上调用equals
(当然,在实现此方法之后)