转换子类扩展相同的原始类

MUH*_*nc. 5 java casting subclass

如何在java中强制转换两个扩展类?

    class B extends Object{

    }

    class C extends Object{

    }

    B b = new B();

    C c = (C)b;//Cannot cast from B to C
Run Code Online (Sandbox Code Playgroud)

Tho*_*sen 14

你不能.考虑稍微重命名:

class Ford extends Car {

}
class Chevrolet extends Car {

}

Ford ford = new Ford();

Chevrolet chevrolet = (Chevrolet) ford;
Run Code Online (Sandbox Code Playgroud)

然而,两者都是汽车,所以你可以说

Car car = ford;
Run Code Online (Sandbox Code Playgroud)

但不仅仅是那个.


Nul*_*ion 6

你不能将一个对象投射B到C,因为B它不是 a C,你能推断出的最好结果是它是一个Object。这是另一个类比:

class Animal {
    public void eat();
}

class Dog extends Animal {
    public void bark();
}

public Cat extends Animal {
    public void meow();
}
Run Code Online (Sandbox Code Playgroud)

假设你有:

Cat sprinkles = new Cat();

// this doesn't make sense
Dog aDog = (Dog) sprinkles;
aDog.bark(); // can't do this because sprinkles can't bark()

// but this does
Animal myCat = (Animal) sprinkles;
myCat.eat(); // but it can eat()
Run Code Online (Sandbox Code Playgroud)