将子类分配给类,反之亦然

时间:2019-06-27 14:57:09

标签: java arrays inheritance variable-assignment

我有这个练习:

public class TestClass{    
    public static void main(String args[]){       
        A[] a, a1;       
        B[] b;       
        a = new A[10]; 
        a1  = a;       
        b =  new B[20];       
        a = b;  // 1       
        b = (B[]) a;  // 2       
        b = (B[]) a1; // 3    
    } 
} 

class A { } 
class B extends A { } 

在我看来,当我写:a = b时,我正在向b中的对象分配另一个引用(a)。实际上,b中的对象有两个引用(a和b)。 但是,对于继承规则,子类也属于超类类型,但是超类也不属于子类类型。

如何将超类引用(a)分配给子类类型(b)?
这也适用于后续分配。

我认为,如果我写了:b = a,那么代码可以毫无问题地进行编译,但是对于赋值a = b,应该有一个编译错误。

为什么这个分配正确?

1 个答案:

答案 0 :(得分:1)

假设A类是动物类,B类是狗类。 您可以创建一只狗(a = b)的动物,因为狗是动物(子类)。但是,这反过来是行不通的(b = a),因为动物的作用可能不止于猫之类的狗,因此您无法将猫指定为狗。因此,要做到这一点,您必须将动物明确地投射为狗(b =(Dog)a)。