単なる好奇心から、変数を 2 つの型に割り当てることは可能ですか?
この件については専門用語がはっきりしていないので、少し明確にさせてください。通常、静的タイプと動的タイプがあります。
Animal a = new Dog();
動的タイプが静的タイプを継承する必要がある場合:
public class Dog extends Animal {...}
しかし、動的型が複数の型を拡張/実装することを保証することは可能ですか?
Dog
クラスを拡張してAnimal
インターフェースを実装する必要があるように?
私は次のようなものを想像します:
Animal [implements Happy] a = new Dog();
私はそれがただのクレイジーな話だと確信していますが、それは可能ですか?そうでない場合、最も近い代替手段は何ですか?
これは、変数が自分で作成したインターフェイスであり、編集できないクラスであることを確認する場合にのみ関連すると考えています。
私が考えることができる1つの方法は、使用するたびにキャストすることでランタイムを決定することです。
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
}