有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java对象转换子类/超类

有人会解释Java中强制转换对象的概念以及用子类代替超类的用法吗?还有用超类代替子类吗

我读过一些书和网上资料,但由于某些原因,我不明白这个概念

例如,如果有一个类结构,其中object是基类,Vehicle扩展了object类。然后,如果我们有两个额外的类“汽车”,它扩展了“汽车”和“摩托车”,它也扩展了汽车。对象投射是如何工作的?什么时候需要明确的演员阵容?演员阵容什么时候会含蓄

反对 | 交通工具 | 汽车-摩托车


共 (2) 个答案

  1. # 1 楼答案

    当您有两个类型不是基元且不同的变量时:

    A a; 
    B b;
    

    如果要将a分配给b(b=a),如果a不是b的子类,则必须使用显式转换。如果a是b的子类,则可以使用隐式转换。就你而言:

    Car c =new Car();
    Motorcycle m=new Motorcycle();
    Vehicle v=new Motorcycle();
    v=c;//Implicit cast, because Car is a subclass of Vehicle;
    c=(Car)v;//Explicit cast, because Vehicle is not a subclass of Car;
    m=(Motorcycle)c;//Doesn't compile even with explicit cast because an instance referenced by a Car variable may never be referenced by a Motorcycle variable 
    
  2. # 2 楼答案

    从后代到祖先的铸造是隐含的,事实上,你最好不要把它看作铸造。摩托车是一种交通工具,所以任何期待交通工具的方法都会欣然接受它

    向任何其他方向移动都是有问题的,需要显式转换。你可以告诉编译器你的摩托车是一辆汽车,它会相信你。车轮。计数仍然有效,转弯(左转)仍然有效(考虑到它们在车辆中的定义)。只要你试着关上窗户,事情就会开始出问题

    以极端怀疑的态度查看所有显式强制转换