现在的位置: 首页 > 综合 > 正文

别样JAVA学习(五)继承上(1.0)Object类equals()

2018年11月02日 ⁄ 综合 ⁄ 共 1388字 ⁄ 字号 评论关闭

上一节继承下(一)我们进行抽象类、接口以及多态的学习,

接下来大家我们讲点特殊的东西就是object类,

我们一直在说继承,子继承了父,父还有没有父类呢,

为什么这么思考,大家想构造函数的第一行是不是都有

一个隐式的super()语句,它们是不是也都会去访问自己的

父类呢?其实是的,这个父类叫什么呢?

叫做Object类,传说JAVA对象中的上帝,哈哈。


1、定义

所有对象的超类,所有对象的直接后者间接父类。

肯定是所有对象都具备的功能。

随便定义一个类

class Demo{}除了隐式的构造方法,本身具备了很多方法。

注意:

例如,由于equals()函数,JAVA认为所有的对象都具备比较性,

都能比较两对象是否相同,能听懂吧?你只要是实体,

它就能比较两对象是不是同一个地址。

equals可以比较创建的两个对象,但这么比有意义么?

2、实例

Demo里面我想建立我自己的比较方式来比较我这Demo对象的特征,

那这时候怎么做呢?你自己是不是要定义功能了啊?

比如说我Demo当中有这样的动作,就是说我Demo当中封装一个数,

我想比较谁啊?我不想比较Demo对象的地址值,

我想比较的是Demo当中的这个数到底是否相同,可以吧?

你也可以把它设为年龄,this.num=num,

那么大家我们是不是要建立一个比较行为啊?参数是谁!?Demo d

class Demo
{      
     private int num;
     Demo(int num)
     {
           this.num=num;
     }
     public boolean compare(Demo d)
     {
          return this.num==d.num;
     }
}


但是大家想一想我们Demo这个类是不是有equals()函数,

父类Object里面我们提供了父类比较的方法,你为什么还要重新写?

是不是直接拿来用即可。我们直接复写Object中的equals()方法。

class Demo
{      
     private int num;
     Demo(int num)
     {
           this.num=num;
     }
     public boolean equals(Object d)
     {
          return this.num==d.num;
     }
}

但是会出现



这是为什么呢?因为没有向下转型,

num属于本类成员函数,不存在于Object中。

class Demo
{      
     private int num;
     Demo(int num)
     {
           this.num=num;
     }
     public boolean equals(Object obj)
     {
          Demo d=(Demo)obj;             //向下转型
          return this.num==d.num;
     }
}


但如果传入不同对象呢?那么是不是使用instanceof

判断obj等不等于Demo即可

class Demo
{      
     private int num;
     Demo(int num)
     {
           this.num=num;
     }
     public boolean equals(Object obj)
     {
          if(!(obj instanceof Demo))
               return false;
          Demo d=(Demo)obj;             //向下转型
          return this.num==d.num;
     }
}


总的来说,

Object中的equals()这方法默认比较两个对象是否相等,

可是比较对象相等是不是意义不太大,因此我们建立

对象自身特有内容的比较方式,怎么办?复写!

因为父类中已经定义好,但是别忘了如果你用到了对象中特有的数据

要对对象进行判断和转换。以上就是Object中的equals()方法特点。

抱歉!评论已关闭.