我试图弄清楚为什么铸件是多余的(那是我得到的警告),最后打印的是“ 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");
}
}
答案 0 :(得分:2)
C extends B
表示C
是B
。并且您无需将C
强制转换为B
,因为它是B
。
因此,向上转换(C到B)始终是多余的。唯一需要铸造的情况是垂头丧气(从B到C):
B b = new C();
C c = (C) b;
答案 1 :(得分:1)
类c扩展了类B。因此,由于继承,任何C对象也是B对象。因此,您无需在c之前显式转换'(B)'。