别样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;
}
}
可是会出现
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjMzMjU3MQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
这是为什么呢?由于没有向下转型。
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()方法特点。
别样JAVA学习(五)继承上(1.0)Object类equals()的更多相关文章
- 别样JAVA学习(五)继承上(1.1)Object类toString()
接下来说完equals以后,我们学习接下来的toString(), Java又觉得全部对象不光具有比較性, 还能使对象变成字符串被打印. 出现 曾经前面显示的是数组.如今显示的是这个对象所属的类. 紧 ...
- Java 面向对象概述原理: 多态、Object类,转型(8)
Java 面向对象概述原理: 多态.Object类,转型(8) http://docs.oracle.com/javase/tutorial/java/IandI/override.html Java ...
- 面向对象编程(九)——面向对象三大特性之继承以及重写、Object类的介绍
面向对象三大特性 面向对象三大特征:继承 :封装/隐藏 :多态(为了适应需求的多种变化,使代码变得更加通用!) 封装:主要实现了隐藏细节,对用户提供访问接口,无需关心方法的具体实现. 继承:很好的实现 ...
- Java学习笔记--继承和多态(上)
1.通过继承来开发超类(superclass) 2.使用super 关键词唤起超类的构造方法 3.在超类中覆盖方法 4.区分override和overload 5.在Object类中探索toStrin ...
- Java学习笔记---继承和super的用法
自从换了个视频教学,感觉比原来那个好多了,就是学校网速太渣,好多视频看一会卡半天,只能先看看已经下载的了. 不过也好,虽然不能从开始开始重新开,但是已经看过一次,在看一次也是好的,就当巩固学习了. 继 ...
- Java学习笔记--继承和多态(下)
1.通过继承来开发超类(superclass) 2.使用super 关键词唤起超类的构造方法 3.在超类中覆盖方法 4.区分override和overload 5.在Object类中探索toStrin ...
- Java学习笔记--继承和多态(中)
1.通过继承来开发超类(superclass) 2.使用super 关键词唤起超类的构造方法 3.在超类中覆盖方法 4.区分override和overload 5.在Object类中探索toStrin ...
- java学习记录笔记--继承,super,Object类
继承: Java中的继承是单继承的. 1.子类拥有父类的全部属性和方法. 可是属性和方法的修饰符不能使private. 2.能够复用父类的代码. 方法的重写须要满足的条件: a.返回值类型 b.方法名 ...
- Java学习从菜鸟变大鸟之一 hashCode()和equals()的本质区别和联系
在学习java,根据视频做实例的过程中,对equals和hashcode两个方法理解稍微深刻一点,主要是它们两个很容易混淆,容易出错,自己又通过网上的资料学习,和大家分享 equals()方法 equ ...
随机推荐
- 服务确定(服务类收货ML81N)
FUNCTION zrfc_mm005. *"---------------------------------------------------------------------- * ...
- 发掘ListBox的潜力(三):显示即时提示(Tips)
ListBox显示即时提示(Tips) Listbox内容太长时超出Listbox宽度的部分将无法显示,一种解决方法是让Listbox产生横向滚动条,滚动显示内容(见前面的<发掘ListBox的 ...
- IdHttpServer实现webservice(130篇DataSnap文章)
IdHttpServer实现webservice 朋友有个项目,通信协议使用HTTP,数据序列使用BIN(二进制).他不知道要选用何种技术方案. REST webservice是http+json ...
- nginx的sendfile指令的作用
linux为了解决对读文件产生的从应用空间到内核空间复制数据产生的效率影响引进了零拷贝.什么是零拷贝?这里就不多说了,请参考http://blog.csdn.net/crazyguang/articl ...
- 7个基于Linux命令行的文件下载和网站浏览工具
7个基于Linux命令行的文件下载和网站浏览工具 时间:2015-06-01 09:36来源:linux.cn 编辑:linux.cn 点击: 2282 次 Linux命令行是GNU/Linux中最神 ...
- 我在知乎上关于Laser200/310电脑的文章。
我是30年前从Laser-310起步的,我来回答这个问题. 主要硬件规格: CPU:Z-80A/4.7MHz主频 16K RAM + 2K Video RAM 16K ROM 磁带输出:波特率300 ...
- Spinner的用法实现
界面上只有一个textview和一个spinner,实现下拉列表框. spinner.xml: <?xml version="1.0" encoding="utf- ...
- STM32建立project库函数方法
(1)打开keilMDK主界面能够看到project中有一个默认的project,点击这个project名字,然后选择菜单Project->Close Project,就关闭掉这个project ...
- inline与lnk2001、lnk2019,鸡肋?
inline函数居然出现了lnk2001.lnk2019,先贴代码. a.h #pragma once class A { public: inline void foo(); void us ...
- javascript学习初衷
很久没有过来写东西了,由于要做小网页,介于不懂javascript,一味的去爬其他站点的代码下来,却不能自由组合,控制,达到自己想要的效果, 于是只能沉下心,javascript从头学起,还记得张老师 ...