别样JAVA学习(六)继承下(2.1)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()方法特点。

时间: 2024-10-01 21:14:33

别样JAVA学习(六)继承下(2.1)Object类equals()的相关文章

别样JAVA学习(六)继承下(2.2)Object类toString()

接下来说完equals以后,我们学习接下来的toString(), Java又认为所有对象不光具有比较性, 还能使对象变成字符串被打印. 出现 以前前面显示的是数组,现在显示的是这个对象所属的类, 紧跟着是这个对象的哈希值,也就是所有的对象都有哈希值(内存地址). 接下来,修改ObjectDemoToString class类 class ObjectDemoToString { public static void main(String[] args) { Demo d1=new Demo(

非专业码农 JAVA学习笔记 3 抽象、封装和类(2)

(2).静态域-放在内存公共存储单元,不放在特定的对象,用static修饰 (续上一篇<非专业码农 JAVA学习笔记 3 抽象.封装和类(1)>...) (3).静态初始器-由static引导的一对大括号括起来的语句组,作用跟构造函数相似 (4).最终域-final引导的,值在整个过程都不发生改变的 5.方法 (1)方法的定义:修饰词1 修饰词2…返回值类型 方法名(参数) throw[异常列表] 这里个人经验就是注意定义了返回值的方法,要在方法体里面增加return 该类型变量:此外遇到if

Java语言Lang包下常用的工具类介绍_java - JAVA

文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 无论你在开发哪中 Java 应用程序,都免不了要写很多工具类/工具函数.你可知道,有很多现成的工具类可用,并且代码质量都很不错,不用你写,不用你调试,只要你发现. 在 Apache Jakarta Common 中, Lang 这个 Java 工具包是所有 Apache Jakarta Common 项目中被使用最广泛的,几乎你所知道的名气比较大的软件里面都有用到它,包括 Tomcat, Weblogic, Webs

别样JAVA学习(五)继承上

上章我们进行了面向对象的学习, 发现如果定义的几个类中的属性和方法重复, 代码是不是会显得很冗余啊?,有没有一种思想可以简化呢? 有!下面我们来看继承就能解决这个问题 1.继承-概述 继承: 1,提高了代码的复用性 2,让类与类之间产生了关系,也就是多态的特性 注意:千万不要为了获取其它类的功能,简化代码而继承 必须是类与类之间有所属关系才可以继承. Java语言中:java只支持单继承,不支持多继承 因为多继承容易带来安全隐患:当多个父类中定义了相同功能 且功能内容不同时,子类对象不确定运行哪

Java学习笔记--继承和多态(下)

1.通过继承来开发超类(superclass) 2.使用super 关键词唤起超类的构造方法 3.在超类中覆盖方法 4.区分override和overload 5.在Object类中探索toString()类 6.发现多态性和动态绑定 7.描述解释为什么向下转型是必须的 8.在Object类中探索equals 方法 9.存储,取回,实现ArrayList的对象 10.使用ArrayList类实现Stack 11.超类中使用数据和方法,protected 12.使用final模块来禁止类和方法的覆

Java学习笔记--继承和多态(上)

1.通过继承来开发超类(superclass) 2.使用super 关键词唤起超类的构造方法 3.在超类中覆盖方法 4.区分override和overload 5.在Object类中探索toString()类 6.发现多态性和动态绑定 7.描述解释为什么向下转型是必须的 8.在Object类中探索equals 方法 9.存储,取回,实现ArrayLis的对象 10.使用ArrayList类实现Stack 11.超类中使用数据和方法,protected 12.使用final模块来禁止类和方法的覆盖

java学习记录笔记--继承,super,Object类

继承: Java中的继承是单继承的. 1.子类拥有父类的全部属性和方法. 可是属性和方法的修饰符不能使private. 2.能够复用父类的代码. 方法的重写须要满足的条件: a.返回值类型 b.方法名 c.參数类型及个数 必须要与父类全然同样. 继承的初始化顺序: 1.初始化父类再初始化子类 2.先运行初始化 对象属性 ,再运行 构造方法 中的初始化. finalkeyword: final能够修饰 类,方法,属性和变量. final修饰类,则该类不同意被继承. final修饰方法,则该方法不同

Java学习笔记---继承和super的用法

自从换了个视频教学,感觉比原来那个好多了,就是学校网速太渣,好多视频看一会卡半天,只能先看看已经下载的了. 不过也好,虽然不能从开始开始重新开,但是已经看过一次,在看一次也是好的,就当巩固学习了. 继承的关键字:extends 格式如下: class 子类名 extends父类名{ ... } 例如 学生是继承人类这一父类的. class student extends person{ ... } 如果一个类的声明没有使用关键字extends,则这个类默认是继承Object类的.Object是所

非专业码农 JAVA学习笔记 3 抽象、封装和类(1)

抽象.封装和类(1)待续 首先声明,今天接了太多个电话,两个小时看书被打断多次,缩减为一个小时.不管了,走马观花也要看完几个小节: (一)抽象与封装:抽象-抽取和研究实际性问题加以考察(抽象-尼玛抽出对象…) 封装:相关操作封存在命名空间.类等 (二)java的类: 1.系统定义的类(用于import中引入) 类名 作用 Java.lang 语言包,默认加载 Java.io, In out:文件数据流操作产生的输入输出流 Java.util 低级工具,如时间data类,变成数组vector类,h