您的位置:首页 > 移动开发 > Objective-C

Object类----equals方法与equals覆写

2017-10-24 10:37 435 查看
/*
object:所有类的根类

object是不段抽取而来的,具有所有对象都具备的共性内容。

常用的共性功能:

*/
/*
class Fu //extends Object
{
Fu()
{
super();
}
}
class Zi extends Fu //子类并不继承object 因为java没有多继承
{
Zi()
{
super();
}
}*/

class Person extends Object
{
private int age;
Person(int age)
{
this.age = age;
}
//我们发现 equal函数完全可以用 == 来代替 十分鸡肋
//并且 如果我们不想要比较地址值 而是内容 那我们该怎么做?
//如下定义一个比较函数吗?
public boolean compare(Person p)
{
return this.age == p.age;
}

/*
*(non-Javadoc)
* @see java.lang.Object#equals(java.lang.Object)
* 一般都会覆盖此方法,根据对象的特有内容,建立判断对象是否有相同的依据。
* 一般不比较地址值 没有意义。
*/

//然而 因我们继承了object 已经有equal函数 我们只需要进行覆写。
public boolean equals(Object obj)//注意 参数需和父类中的函数参数相同 否则便是重载
{
//return this.age == obj.age;//出现问题:其实参数是多态形式 传进来的参数已经
//被向上提升为object型 而提升后子类特有数据无法被调用。
//因此 我们需要向下转型: 注意:向下转型时要注意类型。
if(!(obj instanceof Person))
{
//          return false;
throw new ClassCastException("类型错误");
}
Person p = (Person)obj;
return this.age == p.age;
}
}
class Demo3
{

}

public class ObjectDemo1 {

public static void main(String[] args) {
// TODO Auto-generated method stub
Person p1 = new Person(20);
Person p2 = new Person(10);

Demo3 d = new Demo3();
//出现新问题 因为覆写的equals函数里的参数是object
//那么意味着所有类都可以往里传。
//如我们现在往里穿demo形式的d
//这时 我们就需要做一些处理。
System.out.println(p1.equals(d));
//      System.out.println(p1.equals(p2));//false 比较的地址值
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: