58

instanceofオブジェクトが特定のクラスの直接インスタンスであるか子孫インスタンスであるかをテストするために使用できます。instanceofインターフェイスをクラスのようにインスタンス化できない場合でも、インターフェイスで使用することもできます。誰かがどのように機能するか説明できますinstanceofか?

4

8 に答える 8

64

まず、特定のものをこのようにinstances実装するクラスを格納できます。interfaceinterface reference variable

package com.test;

public class Test implements Testable {

    public static void main(String[] args) {

        Testable testable = new Test();

        // OR

        Test test = new Test();

        if (testeable instanceof Testable)
            System.out.println("instanceof succeeded");
        if (test instanceof Testable)
            System.out.println("instanceof succeeded");
    }
}

interface Testable {

}

つまり、特定のインターフェイスを実装するランタイム インスタンスはすべてinstanceofテストに合格します。

編集

そして出力

instanceof succeeded
instanceof succeeded

@RohitJain

このような匿名の内部クラスを使用して、インターフェイスのインスタンスを作成できます

Runnable runnable = new Runnable() {
    
    public void run() {
        System.out.println("inside run");
    }
};

instanceofそして、このような演算子を使用して、インスタンスがインターフェイス型であることをテストします

System.out.println(runnable instanceof Runnable);

結果は「true」です

于 2012-11-21T06:51:28.287 に答える
20

object instanceof object_interfaceお譲り致しtrueます。

于 2012-11-21T06:47:31.107 に答える
6

に対してinstanceofa のチェックを行うと、その特定の型が指していることがチェックされます。referenceinstanceinstancereference

interfaceこれで、実装のインスタンスを指すの参照を作成できるようになりました( を指すのclassと同じ概念)。それで、あなたはそれをチェックすることができます。Super class referencesubclass instanceinstanceof

例:-

public interface MyInterface {
}

class ImplClass implements MyInterface {

    public static void main(String[] args) {
        MyInterface obj = new ImplClass();

        System.out.println(obj instanceof ImplClass);   // Will print true.
    }
}
于 2012-11-21T06:48:05.147 に答える
-1

instanceof 演算子は、最初の引数が 2 番目の引数を実装するオブジェクトであるかどうかを示します。インターフェイスを直接インスタンス化できないことがなぜ重要なのか理解できません。

Integer num = 1;
if (num instanceof Number) {
  System.out.println("An integer is a number!");
}

それだけです。

于 2012-11-21T06:47:43.573 に答える