1

私には2つのクラスがあります:TeacherCoordinatorCoordinator拡張しTeacherます。

Teacher基本的に、インスタンスまたはインスタンスのいずれかを取り込むことができるインスタンス変数を作成したかったのCoordinatorです。

Teacher exp = new Teacher()またはを書くだけで簡単にこれが可能であることはわかっていますが、これを行うと、メソッドとプロパティにTeacher exp = new Coordinator()アクセスできるのは、適用するとき、または通常の参照変数にのみアクセスできます。私の質問は、Teacher OR Coordinatorオブジェクトに割り当てることができるインスタンス変数を1つだけ使用し、この変数を使用して、オブジェクト参照変数に割り当てられたオブジェクトのプロパティ/メソッドを呼び出す別の方法はありますか?Teachernew Coordinator()new Teacher()

4

5 に答える 5

8

expがCoordinatorthenキャストであるかどうかを確認し、それに応じてその関数を呼び出すことができます。

if(exp instanceof Coordinator) {
    ((Coordinator)exp).foo();
}

やりたいことがいくつかある場合は、ローカルスコープで変数を作成し、それを繰り返し使用できます。

if(exp instanceof Coordinator) {
    Coordinator expCoord = (Coordinator)exp;
    expCoord.foo();
    expCoord.bar();
    expCoord.baz();
}
于 2012-12-27T23:47:34.473 に答える
1

呼び出したいすべてのメソッドが親クラスに存在しない限り、これを行う方法はありません。

Teacher変数にあるものをCoordinatorにキャストできますが、Teacher変数にあるものが実際にはCoordinatorオブジェクトインスタンスでない場合は失敗します。

((Coordinator)exp).coordinate();
于 2012-12-27T23:48:26.610 に答える
0

のメソッドを呼び出したい場合は常に、オブジェクトを最初Coordinatorにキャストする必要があります。Coordinator

((Coordinator)myTeacher).coordinatorMethod();
于 2012-12-27T23:47:42.810 に答える
0

いいえ、型安全性のためです。しかし、あなたはいつでもすることができます:

Teacher exp = new Coordinator()
((Coordinator)exp).someCoordinatorMethodOrProperty()
于 2012-12-27T23:47:54.260 に答える
0

はい。それで合っています、

ここでは、同じ概念が親子関係として実装されています。これは、子クラスのインスタンスが子のプロパティと親の両方にアクセスできるためですが、親クラスのインスタンスは子クラスのプロパティにのみアクセスします。

それが起こっている理由です。

于 2012-12-29T17:43:56.927 に答える