父类:
子类:
一般@ToString和@EqualsAndHashCode注解是加在子类上的,其它注解大同小异。
问题:使用继承时 调用@toString方法 默认不会输出父类中的字段。
解决:设置@ToString(callSuper = true),callSuper属性为true 就可以实现toString方法输出父类中继承的属性。
默认有@ToString(callSuper = false),写不写都存在。
问题:使用继承时 调用@EqualsAndHashCode(callSuper = false)方法,默认不会比较父类属性中的内容和HashCode。
解决:@EqualsAndHashCode(callSuper = false)方法,默认是callSuper = false。
这个@EqualsAndHashCode(callSuper = false)注解写不写都存在。
就是这个默认不会调用父类的属性用来Equals判断和HashCode判断。
所以说只要子类的属性和值是一样的就为true,反正false。设置callSuper = true即可。
@EqualsAndHashCode(callSuper = false),父类和子类属性内容都一样,没加注解和加了注解结果是一样的:
@EqualsAndHashCode(callSuper = false),父类属性内容都一样,子类属性内容不一样,没加注解和加了注解结果是一样的:
@EqualsAndHashCode(callSuper = false),父类属性内容不一样,子类属性内容都一样,没加注解和加了注解结果是一样的:
@EqualsAndHashCode(callSuper = false),父类属性内容不一样,子类属性内容不一样,没加注解和加了注解结果是一样的:
总结:
所以说加不加注解,会默认存在,但是不会比较父类的属性和内容,只会比较子类的属性和内容,一致为true,不一致为false。
加了@EqualsAndHashCode(callSuper = true)之后,都会比较父类和子类的属性和内容,相当于就是所有一致则为true,不一致则为false。