java中的API,学习object的类中equals()方法中的问题,
一、什么是API即:Application Programing interface应用程序接口。就是javajdk中提供给我们使用的类,已经封装好的,直接拿来用就行了。二、Object类object类是所有类的父类,在lang包中,lang包不用导入。接口中没有构造方法,全是抽象方法。 三、equals()方法学习中遇到的问题。第一个问题:利用多态向下转型,进行比...
一、什么是API
即:Application Programing interface应用程序接口。就是javajdk中提供给我们使用的类,已经封装好的,直接拿来用就行了。
二、Object类
object类是所有类的父类,在lang包中,lang包不用导入。
接口中没有构造方法,全是抽象方法。
三、equals()方法学习中遇到的问题。
第一个问题:利用多态向下转型,进行比较对象中的年龄。
方法equals()传递的是对象。p1,p2都是对象的地址,对象地址肯定是不同的,b变量的值必为false。但是有个问题,如果你想比较对象中的年龄,该如何比较呢?
1、首先要重写equals()方法,并提出问题。
用this.age==obj.age作比较判断。但是有个问题,因为方法接收的参数是Object 基类。基类有个问题。
age是子类特有的变量。解决这个问题,必须做向下转型。
2、解决方案,对引用变量obj做向下转型。
这就搞定了子类特有变量的比较。
3、又出现了一个问题。
既然object类是所有类的父类,那么传递一个其他类object也能接收啊。
因为array对象无法向下转型为Person类。为什么p2能转成Person类,array对象就不能呢?因为p2本身就是Person类。array类跟Person类根本没有关系,他们是平等关系都是引用类。肯定会报错。会出现类转换异常。
4、解决方案。
对方法进行健壮性判断。instanceof关键字判断是不是要的类
5、又出现了一个问题
如果传过来的参数是null.也能通过instanceof关键字的判断。如何处理?
增加一个判空条件。
即:
通过判空条件解决问题。
6、还可以增加一个健壮性。
即:如果传过来的参数对象正好和要比较的参数对象相同,那就不用判断了。因此再增加一个相同的判断。
更多推荐
所有评论(0)