c的向上广播为什么会冗余?

时间:2019-07-01 18:21:31

标签: java dynamic casting binding

我试图弄清楚为什么铸件是多余的(那是我得到的警告),最后打印的是“ 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");
    }
}

2 个答案:

答案 0 :(得分:2)

C extends B表示CB。并且您无需将C强制转换为B,因为它是B

因此,向上转换(C到B)始终是多余的。唯一需要铸造的情况是垂头丧气(从B到C):

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

答案 1 :(得分:1)

类c扩展了类B。因此,由于继承,任何C对象也是B对象。因此,您无需在c之前显式转换'(B)'。