java - 这段代码里的Object类型为啥能被强制转换为Comparable接口类型呢?明明Object类型没有实现它呀
本文介绍了java - 这段代码里的Object类型为啥能被强制转换为Comparable接口类型呢?明明Object类型没有实现它呀的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
看高琪Java300集第124集时发现了这个问题:
这段代码里的Object类型为啥能被强制转换为Comparable接口类型呢?明明Object类型没有实现它呀,为啥编译能通过?
萌新求大神指点!谢谢!
if(((Comparable)arr[i]).compareTo(arr[i+1])==0){
整个方法的代码如下
public static void sort(Object[] arr){
boolean sorted= true;
int len = arr.length;
for(int j=0;j<len-1;j++){
sorted = true;
for(int i=0;i<len-1-j;i++){
if(((Comparable)arr[i]).compareTo(arr[i+1])==0){
Object temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
sorted = false;
}
}
if(sorted){
break;
}
}
解决方案
编译器假设你强制类型转换的前提是你已经知道了可以这样做,即 (A)B 就表示 B 是 A 的子类或者 B 实现了 A 接口,所以强制类型转换编译器并不会报错。至于 Object
为什么能转化为 Comparable
—— 你应该这样想,这意味着某个类 X 实现了 Comparable
接口,然后 Object
又是所有类的父类,那么 Object obj = x;
肯定是可以,所以 obj 在内存中引用的是对象 x;而 X 又实现了 Comparable
,所以当然可以将 obj 引用的 x 转化为一个 Comparable
。
这篇关于java - 这段代码里的Object类型为啥能被强制转换为Comparable接口类型呢?明明Object类型没有实现它呀的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文