为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

芜湖不芜 2023-02-23 11:19:10
我有这个练习: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 回答

?
翻过高山走不出你

TA贡献1875条经验 获得超3个赞

假设 A 类是 Animal 类,B 类是 Dog 类。您可以创建一种动物,即狗 (a = b),因为狗是动物(子类)。但这并不适用于相反的方式 (b = a),因为动物可以不仅仅是狗,例如猫,所以你不能将猫指定为狗。因此,要做到这一点,您必须明确地将 Animal 转换为 Dog (b = (Dog) a)。



查看完整回答
反对 回复 2023-02-23
  • 1 回答
  • 0 关注
  • 81 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信