首页 > 解决方案 > 为什么 c 的向上转换是多余的?

问题描述

我试图弄清楚为什么铸造是多余的(这就是我得到的警告)最后打印的是“C”。

public class Main {
public static void main(String[] args){
    C c = new C();
    B b1 = (B) c;
    b1.f();
    }
}

class A{
    void f(){
    System.out.println("A");
   }
}

class B extends A{

}

class C extends B{
    void f(){
    System.out.println("C");
    }
}

标签: javadynamiccastingbinding

解决方案


C extends B意味着这C是一个B. 而且您不需要强制C转换为B,因为它是B.

所以向上转型(C 到 B)总是多余的。唯一需要强制转换的情况是向下转换(B 到 C):

B b = new C();
C c = (C) b;

推荐阅读