Java instanceofのさらなる理解

2953 ワード

instanceofはJavaの2元オペレータで、=,>,<と同じクラスです.アルファベットで構成されているため、Javaの予約キーワードでもあります.左側のオブジェクトが右側のクラスのインスタンスであるかどうかをテストし、booleanタイプのデータを返す役割を果たします.例を挙げます.
    String s = "I AM an Object!";

    boolean isObject = s instanceof Object;

  Stringオブジェクト参照を宣言し、Stringオブジェクトを指し、instancofを使用してオブジェクトがObjectクラスのインスタンスであるかどうかをテストします.これは本当なので、true、すなわちisObjectの値がTrueに戻ります.
instanceofにはいくつかの役に立ちます.たとえば、請求書を処理するシステムには、次の3つのクラスがあります.
    public class Bill {//    }

    public class PhoneBill extends Bill {//    }

    public class GasBill extends Bill {//    }

  プロセッサにはBillタイプのオブジェクトを受け入れて金額を計算する方法があります.2つの請求書の計算方法が異なると仮定し、入力されたBillオブジェクトは2つのいずれかである可能性があるので、instanceofで判断します.
public double calculate(Bill bill) {

    if (bill instanceof PhoneBill) {

        //      

    }

    if (bill instanceof GasBill) {

        //      

    }

    ...

}

  これにより,2つの種子類を1つの方法で処理することができる.
しかしながら,この手法は通常,オブジェクト向けの多態性をうまく利用していないと考えられる.実は上の機能は方法でリロードして完全に実現することが要求されて、これはオブジェクト向けにあるべき方法になって、構造化のプログラミングモードに戻ることを避けます.2つの名前と戻り値が同じであれば、パラメータタイプの異なるメソッドを受け入れることができます.
public double calculate(PhoneBill bill) {

    //      

}

public double calculate(GasBill bill) {

    //      

}

 
だから、instanceofを使うのは、ほとんどの場合、お勧めのやり方ではなく、多態をよく利用しなければならない.