这段代码如何将子类对象分配给超类类型?

时间:2017-06-04 19:25:18

标签: java casting polymorphism

在下面的代码中,有人可以向我解释“A ba =(A)b”的含义吗?并向我解释产出及其来源。

class A {
    public void f(A a) { System.out.println("fa(A)");}
    public void f(B b) { System.out.println("fa(B)");}
}

class B extends A {
    public void f(A a) { System.out.println("fb(A)"); }
    public void f(B b) { System.out.println("fb(B)"); } 
}

public class TypeMeister {
    public static void main(String[] args){
        A a = new A();
        B b = new B();
        A ba = (A)b; //please explain

        a.f(a);
        a.f(b);
        b.f(a);
        b.f(b);
        a.f(ba);
        b.f(ba);;
        ba.f(a);
        ba.f(b);
        ba.f(ba);
    }
}

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

A ba = (A)b;是一个显式的类型转换操作。 b明确属于B类型,但隐式属于A类型,因为BA的子类。

由于BA的子类,因此您可以将对象b初始化为:

A b = new B(); 

这相当于

B b = new B();
A ba = (A)b;

...但是缩短了1行。