这段代码里的Object类型为啥能被强制转换为Comparable接口类型呢?

Posted somsom<

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了这段代码里的Object类型为啥能被强制转换为Comparable接口类型呢?相关的知识,希望对你有一定的参考价值。

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

 

以上是关于这段代码里的Object类型为啥能被强制转换为Comparable接口类型呢?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Swift4 会强制转换 UIButton 数组!到 [UIButton?] 类型?

为啥不能将不完整的类型强制转换为 void?

为啥 Pandas 将我的 numpy float32 强制转换为 float64?

labview里的强制类型转换怎么用啊?

如果 Java 是强类型的,那么为啥这段代码会编译? [关闭]

java,Object类型可以转换为接口吗?