是否可以将变量分配给两种类型?

Ask*_* B. 3 java

出于好奇,是否可以将变量分配给两种类型?

由于我在这个问题上没有直接的技术术语,所以让我澄清一下.通常你会有一个静态和动态类型:

Animal a = new Dog();
Run Code Online (Sandbox Code Playgroud)

动态类型必须继承静态类型:

public class Dog extends Animal {...}
Run Code Online (Sandbox Code Playgroud)

但是有可能确保动态类型扩展/实现多种类型吗?

那么Dog必须扩展Animal-class并实现一个接口?

我想象的是:

Animal [implements Happy] a = new Dog();
Run Code Online (Sandbox Code Playgroud)

我很确定这只是疯狂的谈话,但它有可能吗?如果没有,最接近的替代方案是什么?

我认为这只有在确保变量属于您自己制作的界面和无法编辑的类时才有意义.

我能想到的一种方法是每次使用时通过强制转换来确定运行时:

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
}
Run Code Online (Sandbox Code Playgroud)

Tom*_*icz 5

不,不可能直接.你可以想到一些解决方法,如:

abstract class HappyAnimal extends Animal implements Happy
Run Code Online (Sandbox Code Playgroud)

然后使用该类型.当然,您的类必须扩展HappyAnimal,如果它们直接扩展Animal和实现,它将无法工作Happy.