2016-04-18 8 views
2

動的継承などがJavaに存在しますか?Javaでの動的継承

明確にするために、動的継承によって、私は実行時に特定のクラスを継承するクラスを指定することができますか? (Aは{X | X∈{P、T、Q}}から継承します)

私は次の子クラスを持つクラスAnimalを実装する必要がある場合、私のオプションが何であるかを理解しようとしています。 :FlyingAnimal、WalkingAnimal、SwimmingAnimalなど

同時に、アニマルを人間と人間以外の人に細分する必要がありますが、動作は若干異なります。私がしたいのは動物から人間と人間以外の人間を派生させ、次にWalkableなどから動物を派生させることです。実行時にどの動物がいるかを決めたいと思います(動物が歩くか飛ぶかを仮定して)。私は、実行時に特定のクラスを継承するものクラスから

+5

短い答え:いいえ。長い答え:noooooo。実行時にこれを動的に行うことはできません。 –

+0

@LouisWassermanハハ、いいです:-) –

+0

必要なすべてのクラスを実装する必要があります。実行時に1つ選択します。 – saka1029

答えて

2

号Javaは、コンパイル時の型チェックとコンパイル言語です。しかしながら、実行時にバイトコードを作成するためにBCELのようなバイトコード操作ライブラリを使用することは、可能です。です。 BCELホームページごとに1つの興味深いアプリケーションは

+0

ありがとう@Elliot!私はそれを見ていきますが、Javaの知識がバイト操作に入るのに十分であるとは思わない(少なくとも、まだ)。しかし、あるクラス(A)からクラスXを継承し、その結果を子クラス(B)のインスタンスにキャスティングするなどの方法がありますか? –

3

実行時に最初からクラスの作成である適切な方法またはこのような状況を解決するには、通常は(縮小)構図委任(これらはキーワードにしています検索する)。

例えば、あなたのクラスはにこれらのクラスのオブジェクトであるを含むことができ、継承する代わりに単にそれを使用することができます。

すなわち

interface Engine {} 
class Diesel implements Engine {} 
class Electric implements Engine {} 
class Car /* NOT extends Diesel/Electric */ { 
    Enigne engine; /* delegate or composition pattern */ 
}