别样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 ...
随机推荐
- JavaScript编程:javaScript核心基础语法
1.javaScript核心基础语法: javaScript技术体系包含了5个内容: 1.核心语言定义: 2.原生对象和雷子对象: 3.浏览器对象 ...
- EL表达式(3)
本篇讲解使用EL表达式来调用Java方法(自定义EL函数)和Sun公司开发的EL函数库. 简单来说,我们在一个类中的某个方法,可以使用EL进行调用,这个能被EL表达式调用的方法称之为EL函数,但是这种 ...
- Servlet的学习之ServletContext(1)
本篇来介绍Servlet中非常重要的对象,如ServletConfig类和ServletContext类,尤其是ServletContext类中的一些方法,本篇先讲述一部分,在下一篇中继续补充. 在对 ...
- catalan 数——卡特兰数(转)
Catalan数——卡特兰数 今天阿里淘宝笔试中碰到两道组合数学题,感觉非常亲切,但是笔试中失踪推导不出来后来查了下,原来是Catalan数.悲剧啊,现在整理一下 一.Catalan数的定义令h(1) ...
- MFC界面相关(彩色工具栏)
MFC工具栏控件 创建工具栏步骤: (1)在Resource View中插入新toolbar (2)在toolbar上双击增加按钮,更改ID为ID_BUTTON,编译后在resource.h中即可看到 ...
- android 实现代码关机
开始从网上搜索,通过发action的方式实现,不过一直没有成功. Intent intent = new Intent(); intent.setAction(Intent.ACTION_SHUT ...
- squid+apache实现缓存加速
本实例是squid和apache在同一台机器上,squid做前端反向代理.port为80,apache作为后端web,port为81 serverip:172.16.8.102 1.首先介绍下版本号选 ...
- Delphi 10.1 柏林更新内容简译
新的 SDKTransform.exe 支持转换 Object-C 或 C++ 头文件到Delphi. 修改了对话框的接口,分成了同步和异步两种: http://blog.qdac.cc/?p=380 ...
- c++ 类名和enum时重复时要在类名前加class::
c++ 类名和enum时重复时要在类名前加class:: 一些不好的习惯都是用小写,但又没有区分开token,看看代码再说,下面的代码是我在测试polymorphism时写的一部分,怎么也查不出,最后 ...
- chfn,chsh,last,login,mail ,mesg ,talk,wall,write,nice ,pstree ,renice,skill ,expr ,reset,tset,compress ,lpd ,lpq ,lpr ,lprm,fdformat ,mformat ,mkdosf
名称:chfn 使用权限:所有使用者 用法:shell>> chfn 说明:提供使用者更改个人资讯,用于finger and mail username 范例: shell>> ...