关于this.getClass() != student.getClass()
来源:2-5 使用自定义类测试我们的算法
TaraTara
2020-12-21 05:46:51
if(this.getClass() != student.getClass()){
return false;
}
老师,我不太理解,这里this的类型是Student,student的类型是Object, 那么this.getClass() 和student.getClass()怎么会相等呢?
1回答
赞问题!不过这不是一个算法问题,而是一个 Java 语言的问题。同时,这个问题还有点儿高级:)
首先,你可以做这样一个实验:
可以看到,test 接受的是 Object 类型的参数。
当传入的是 Integer 类型时,o.getClass 打印出来的是 Integer 类型;
当传入的是 String 类型时,o.getClass 打印出来的是 String 类型;
这个实验已经可以解释你的问题了。
虽然在函数参数里,student 是 Object 类型,但你的 student 如果传来一个 String,或者一个 Teacher 的对象,那和 this.getClass() 是不会相等的;
但如果传来的是 Student 的对象,student.getClass() 依然能识别这是一个 Student 类的对象,而不仅仅是一个 Object。
如果你对 Java 相对相对初学的话,记住这个结论就好了。
如果你想深究这个问题,问题的关键在于(引自 Java 官方文档):
getClass 返回的是对象的 runtime class,即运行时类型。
在和 Java 相关的教程,比较深入的阶段,通常都会介绍运行时类型的,有兴趣你可以查看一下,自学一下。
简单来说,如果外面创建这个 student 对象,是 new Student 的方式创建的话,那么它的运行时类型一定是 Student 类型,即便依靠多态性传给了一个 Object (或者其他可能的父类) 类型。
继续加油!:)
相似问题