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

/*
 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 比较的地址值
    }

}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值