JAVA-初步认识-第十一章-object类-equals方法(再叙)
一. 介绍object类
在上图举的例子中,体现了继承体系的子类初始化过程中构造函数的变化。由于整个整个框架是设置在继承体系中的,导致运算的过程是逐级往上操作的。首先是由创建对象的括号来启动子类对象的构造函数,子类构造函数中的super()语句又启动了父类中的构造函数。但是父类的构造函数中依然是有super()语句的,虽然在类名的声明上没有标注,是不是可以说只要是继承object类的子类都可以省略extends不写?
现在来介绍object类,类中的方法将会被使用。
在API的object定义中有这么一句话,类object是类层次结构的根类,每个类都使用object作为超类。视频中讲解到,即使定义一个描述类没有做继承动作,它还是会和object类形成继承关系(这样一来对于继承以及object类都必须有所了解),这也是Fu类的后面不写extends的原因,这是默认存在的。从上面所举的例子来看,Zi类能不能继承object类呢?是不可以的,因为java中不允许多继承的存在。在类的定义上没有多继承。Object是所有类的根类,不是直接的就是间接地。
那么object是怎么来的,java是以对象为主的,每个对象当中它们的共性可以进行抽取,所以在不断的抽取过程中就形成了一个上帝,object。
换句话说,就是object对象中的方法,任意对象都能用。
二. 了解object中常用的共性内容
对于构造函数object()不再赘述,它是给子类对象进行初始化用的,它的上面没有父类的构造函数了。
接着就是object中的方法摘要,对于子类而言,这里面的所有方法都具备。现在介绍其中的几个常用方法,以便后面讲述的时候,对其有着深刻的认识。
2.1 equals方法
Equals是相等的意思,是用来判断两个对象是否相等的。比较的结果要么是相等要么是不等,也就是说函数的类型是boolean类型。
Boolean equals (object obj)这是equals方法的声明,对于一般函数的声明而言,主要有三部分组成,返回值,函数名,形参列表。形参列表中的参数数目,顺序,以及类型都是值得深入研究的。这里为什么形参只有一个?本对象调用该方法和其他对象进行对比,那本对象是确定的,所以那一个形参代表的是输入的对象。这里还有一个大前提,这个对比对象的equals方法,是所有对象都具备的,因为它是属于object类的方法。在这个方法中,只是比较不同对象是否相等,对于对象的类型没有进行约束。因此,形参的类型是object,这就涉及到多态的知识点。为了提高扩展性,任何对象都能进行比较,就定义为object类型。
三. equals函数的运用
Equals函数是用来对比的,现在我们将其和= =运算符进行一个比较,得出它们的差异性。
截图中输出语句里的,p1.equals(p2),讲解一下,p1对象继承了来自object父类的equals方法,自然是可以直接调用的(这里注意一点父类的static修饰的函数外界的可以访问么?)。
Dos结果显示,两者都是错误的。= =比较是两个对象的地址编码,只有多引用指向同一对象,= =才是ture。Equals比较的也是地址,因此dos显示的结果也是flase。深入一点讲解equals比较就是,不同的对象之间进行对比,不同的对象之间肯定有内容不一样的,所以equals方法不可能是比较对象内容的,只能是比较对象地址的。
比较的只能是共性的东西,地址不同的对象都会有,但是内容却是可以完全不同。
有人询问为什么不是比较对象内容,视频中将源代码引入,直接展开讲解源代码。
这里面清晰地展现了object类中的内容,(这应该只是object类中定义的部分内容),private static 是指私有的,共享的;native是说本地的,void是说没有返回值。这句话中没有抽象关键字,是说没有abstract关键字,为什么要有abstract关键字?是因为方法体为空么?视频给出的解释是native的存在,代表着方法体里面是有内容的,里面的内容是用来调用底层的,只是没有向外展示,而不是没有内容,所以不需要abstract关键字来修饰。这是本地方法,存放在本地方法区中。这个方法调用不了,也无法调用。下面的static代码块,随着类的加载就执行了。执行的registerNative(),就是说向本地注册。要将object类先注册到本地系统上,也就是这个类一加载,就必须要执行,而不管这个类创不创建对象。这个就是静态代码块的应用,叫做直接完成注册动作,至于产不产生对象不管,反正类加载必须要先做。
接下来显示了很多本地方法。本地方法怎么实现的,我们不知道,依赖于系统。
在这些截图中,出现了equals方法。观察它的语法,当前对象和指定对象进行比较,就是用this来完成的。这里this用的是= =,那就说明equals函数比较的就是对象的地址编码。这就是我们说的equals方法。它为了能接收更多的对象进来,所以用的object类型作的参数。
总结:equals函数的基本体验就说完了。