出于好奇,是否可以将变量分配给两种类型?
由于我在这个问题上没有直截了当的技术术语,让我澄清一下。通常你会有一个静态和动态类型:
Animal a = new Dog();
动态类型必须继承静态类型的地方:
public class Dog extends Animal {...}
但是是否可以确保动态类型扩展/实现多种类型?
所以Dog
必须扩展Animal
-class 并实现接口?
我会想象这样的事情:
Animal [implements Happy] a = new Dog();
我很确定这只是疯狂的谈话,但这可能吗?如果没有,最接近的选择是什么?
我认为这仅在确保变量属于您自己制作的接口和您无法编辑的类的情况下才有意义。
我能想到的一种方法是通过每次使用它时强制转换来确定它的运行时间:
try {
@SuppressWarnings("unused")
Animal a = (Happy) new Dog();
} catch (ClassCastException e) {
//Is not of type Happy
}
//Using a method from the Happy-interface
try {
((Happy)a).smile();
} catch (ClassCastException e) {
//Is not of type Happy
}