小编nis*_*527的帖子

为什么编译器允许我将一个实现类转换为另一个实现类?

因此,我正忙于向下转换,试图找到有效的方法和无效的方法。我有三个类:基类Animal和两个派生类DogCat

private class Animal {
}

private class Dog extends Animal {
}

private class Cat extends Animal {
}
Run Code Online (Sandbox Code Playgroud)

出于明显的原因,编译器不允许以下代码:

Dog dog = s.new Dog();
Cat cat = (Cat) dog;
Run Code Online (Sandbox Code Playgroud)

这是因为我将一个派生类转换为另一派生类,这是不可能的。但是,如果我创建Animal一个接口类型和Cat一个接口类型,那么编译器会突然接受它,即使没有可能,也不会出现任何问题。

private interface Animal {

}

private class Dog implements Animal {

}

private interface Cat extends Animal {

}
Run Code Online (Sandbox Code Playgroud)

一旦运行与以前相同的代码,就会像预期的那样给我一个错误。

java inheritance downcast

3
推荐指数
1
解决办法
63
查看次数

标签 统计

downcast ×1

inheritance ×1

java ×1