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


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

    接下来大家我们讲点特殊的东西就是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()方法特点。



  • 相关阅读:
    泛型技巧系列:如何提供类型参数之间的转换
    一些支离破碎的泛型反射技巧
    泛型技巧系列:类型字典和Type Traits
    Excel开发:简化工作表中选定区域的操作。
    趣味程序:打印自己代码的程序
    VBF BETA 1.5 发布了
    .NET 2.0 CER学习笔记
    随笔乱入,开心就好
    Cocos2dx for WindowsPhone:开发一个打地鼠游戏(下)
    跨平台网络游戏趋势和优势
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/5086484.html
Copyright © 2020-2023  润新知