当超类没有实现接口而是子类时,在接口子类和超类之间进行转换

unk*_*own 4 java inheritance casting interface

在以下代码中

abstract class Vehicle { }
class Car extends Vehicle implements LandMover { }
interface LandMover { }
     Car porsche=new Car();
     LandMover lmv;
     lmv = porsche;
     Vehicle vec = (Vehicle)lmv;
Run Code Online (Sandbox Code Playgroud)

因为类车和接口LandMover之间没有关系,所以第4行不应该有编译错误吗?如果没有什么可能是原因.谢谢!!

Kep*_*pil 6

编译器只检查是否存在可能的关系,并且只有一个:

A LandMover可以是a Car,而IS-A又是a Vehicle.由于您通过使用显式强制转换来保证此转换正常,因此编译器很高兴.