public boolean equals(object obj){
Name name=null;
if(obj instanceof Name){
name=(Name)obj;
if(name.firstname==this.firstname&&name.lastname==this.lastname){
return true;
}else return false;
}
return super.equals(obj)
}
在这个方法中为什么最后要写上super.equals(obj),难道写返回false不行吗,有点不理解!
为什么还要让交到Object去比较?
有的是这么回答的:后调用super.equals()的意思是,当obj是Name的父类的实例时,调用父类的equals方法来判断是否相等。不能直接返回false,有可能是true的。
但我想问的是:难道传进来的是obj=老子;通过判断返回true了,就认为老子=儿子了?这逻辑上也不成立啊!!!
Name name=null;
if(obj instanceof Name){
name=(Name)obj;
if(name.firstname==this.firstname&&name.lastname==this.lastname){
return true;
}else return false;
}
return super.equals(obj)
}
在这个方法中为什么最后要写上super.equals(obj),难道写返回false不行吗,有点不理解!
为什么还要让交到Object去比较?
有的是这么回答的:后调用super.equals()的意思是,当obj是Name的父类的实例时,调用父类的equals方法来判断是否相等。不能直接返回false,有可能是true的。
但我想问的是:难道传进来的是obj=老子;通过判断返回true了,就认为老子=儿子了?这逻辑上也不成立啊!!!
public boolean equals(object obj){
Name name=null;
if(obj instanceof Name){ //判断的前提条件传入的obj必须是Name的实例,如果不是没有对比的可能。
name=(Name)obj;
if(name.firstname==this.firstname&&name.lastname==this.lastname){ //这里才是判断传入的obj是否符合要求。符合的条件是firestname相等,lastname相等。
return true; //完全相等,则回true
}else return false; //不相等则会false
}
return super.equals(obj)
} 这里注意的是 instanceof 不是判断超类与子类的。而是判断一个实例是否是某个类的实例
就像用Name name = new Name();比较的就是name与Name之间,像这个就是返回true.
那我定义两个classclass Person
{
public Person(String name)
{
this.name = name;
}
pubclis Sting name;
}class Employee extends Person
{
public Employee(Sting name, double salary)
{
super(name);
this.salary = salary;
} pubclic double salary;
}Person a = new Person("Squall");
Employee e = new Employee("Squall", 0.1);那么假如a.equals(e)返回true的话,(只判断人的名字)
e.equals(a)不调用 return super.equals(obj) ;显然返回false
不符合equals应该有一致性
public boolean equals(object obj){
if(obj==null){
return false;
}
if(this==obj){
return true;
}
if(this.getClass()!==obj.getClass()){
return false;} Name name=null;
if(obj instanceof Name){
name=(Name)obj;
if(name.firstname==this.firstname&&name.lastname==this.lastname){
return true;
}else return false;
}
return false;
}
LZ完全没有面向对象的思想和观念A extends B
并不表示B是老子 A是儿子 即便是有老子 儿子2个类 也不会设计儿子继承老子
你以为你将来继承你老爸的遗产 你就extends你爸
愚蠢之极
如果传进来的不是子辈,让父辈去判断吧OVER
return false;
因为Object的equals方法实际是比较是否指向同一对象。既然传进来的obj不是Name类型,就不可能指向同一对象。super.equals(obj)必然返回false
Name name=null;
if(obj instanceof Name){
name=(Name)obj;
if(name.firstname==this.firstname&&name.lastname==this.lastname){
return true;
}else return false;
}
return super.equals(obj)
}
e]
public boolean equals(object obj){
Name name=null;
if(obj instanceof Name){
name=(Name)obj;
if(name.firstname==this.firstname&&name.lastname==this.lastname){
return true;
}else return false;
}
return super.equals(obj)
}
1 代码是你写的,我想你自己清楚
2 代码是其他人写的,那是他的应用设计需要这样,不需要过多的理由。 需求如此!比如,声明采用的是父类,对象实例是子类。 而子类定义了一个完全不同的eauals方法。如果发生了一个父类实例和一个子类实例判断equals的时候,会怎么样呢???1 我们完全可以按照子类的要求来判断,return false.这是我推荐的。
2 在某些特殊的业务需求下,调用父类的equals还是有可能需要的,毕竟传过来的有可能是一个父类。OVER.