首页 > JAVA-初步认识-第十一章-object类-equals方法覆盖

JAVA-初步认识-第十一章-object类-equals方法覆盖

一.

现在要谈论equals方法另一个方面。如果不写equals方法,直接用==来比较也是可以的,貌似equals方法有点多余。

现在不比较对象是否相等,而是比较对象中的特定内容,比如说对象的年龄,之前的写法如下

其实这个方法写完后,本类中还是具备equals方法,因为它继承了object类,所有类都是继承根类的。(无论写还是不写extends object)

compare和equals都是比较对象,只不过侧重点不一样,两者有些重复。既然对象自身具备着是否相同的功能,我们就没有必要再重新定义了。借用比较的功能,但是对其内容进行复写。

有人写成下面的情况,这就不是复写,这是你自己定义的一个功能。这是重载,而不是复写。

我们不想比较地址值,想要比较年龄,默认比较的是return this==obj;我们改成下面这样的。

 

现在来检验一下

为什么会出错呢?传递进来的类中没有age成员变量,为什么呢?就在于equals方法中的形参是equals类型,原先p2是person类型,这样自动提升了类型称为了equals类型,就失去了特有数据,限制了功能。

你想要进行扩展性的应用,你就需要运用多态的形式,而多态一用,就会隐藏子类型。因为,它们都会向上转型。猫一旦变成动物,你想调用它抓老鼠就很难了。但是还想用,就要想到怎么向下转型。

编译运行的结果也是真的。

我们知道,如果我们不覆盖这个方法的话,它就是假,因为地址值不一样。我们一旦覆盖了的话,建立的是年龄比较。

接下来,我们放入的是Demo类,如下所示,(但是其中Demo类中,没有任何东西,没有age,那么貌似无法比较)

编译结果如上,Demo不能被转成person,向上提升类型可以,但是向下强转是不行的,因为从Demo类到person类是行不通的。它接收的范围很广,但是用的时候只有一个。这时候需要做健壮性判断。

写成上面这样有些不太合适,不同类型也是可以输入,不行的话,给个false结果。意味着猪也可以和人进行比较,即使种类差别很大。所以,我们说只有同类型才可以进行比较,不同类型咱就别比了。非同类型,就让你挂掉,不仅仅是给个false,而是抛出一个异常的回复。retunrn false只用来表示同类型,成员变量不相等。那么抛出异常时,是抛出编译异常,还是运行时异常。(我觉着编译还是可以,而且程序无法识别输入的到底是什么,只有在运行输入数据时,才能判别出有错误)

视频中讲解到,抛出编译异常是抛不出去的,要抛出去的话,需要object obj=p2这个声明。

 

 

转载于:https://www.cnblogs.com/wsw-bk/p/7854343.html

更多相关:

  • 英语的重要性,毋庸置疑!尤其对广大职场人士,掌握英语意味着就多了一项竞争的技能。那,对于我们成人来说,时间是最宝贵的。如何短时间内在英语方面有所突破,这是我们最关心的事情。英语学习,到底有没有捷径可以走,是否可以速成?周老师在这里明确告诉大家,英语学习,没有绝对的捷径走,但是可以少走弯路。十多年的教学经验告诉我们,成功的学习方法可以借...

  • 展开全部 其实IDLE提供了一个显32313133353236313431303231363533e78988e69d8331333365663438示所有行和所有字符的功能。 我们打开IDLE shell或者IDLE编辑器,可以看到左下角有个Ln和Col,事实上,Ln是当前光标所在行,Col是当前光标所在列。 我们如果想得到文件代码...

  • 前言[1]从 Main 方法说起[2]走进 Tomcat 内部[3]总结[4]《Java 2019 超神之路》《Dubbo 实现原理与源码解析 —— 精品合集》《Spring 实现原理与源码解析 —— 精品合集》《MyBatis 实现原理与源码解析 —— 精品合集》《Spring MVC 实现原理与源码解析 —— 精品合集》《Spri...

  • 【本文摘要】【注】本文所述内容为学习Yjango《学习观》相关视频之后的总结,观点归Yjango所有,本文仅作为学习之用。阅读本节,会让你对英语这类运动类知识的学习豁然开朗,你会知道英语学习方面,我们的症结所在。学习英语这类运动类知识,需要把握四个原则第一,不要用主动意识。第二,关注于端对端第三,输入输出符合实际情况第四,通过多个例子...

  • 点云PCL免费知识星球,点云论文速读。文章:RGB-D SLAM with Structural Regularities作者:Yanyan Li , Raza Yunus , Nikolas Brasch , Nassir Navab and Federico Tombari编译:点云PCL代码:https://github.co...