次のようなinstanceofキーワードを使用します
if(p instanceof Engineer) {
// do something
}
if(p instanceof Doctor) {
// do something
}
しかし、これは正しい方法ではありません。エンジニアのクラスではエンジニアの行動(メソッド)を、ドクターのクラスではドクターの行動をとる必要があります。
Peterの答えを参照してください。ランタイムポリモーフィズムは、どのメソッドを自動的に呼び出すかを検出します。
すなわち
class Engineer extends Person {
// properties
// methods
public void doWork() {
// does engineering work
}
}
class Doctor extends Person {
// properties
// methods
public void doWork() {
// does doctor work like check patients, operation or other his task
}
}
class Work {
Work(Person p) {
p.doWork(); // if you pass engineer obj here, Engineer.doWork() is called. And if you pass doctor, Doctor.doWork() is called.
// You don't need to use instanceof.
}
}
上記の場合、EngineerとDoctorのメソッド名は同じですが、instanceofを使用する必要がある場合があります。たとえば、DoctorにはcheckPatient()メソッドがあり、EngineerにはdesignEngine()のような異なるメソッド名があり、instanceofを使用する必要があります。 。