1

instanceofリンクに従ってJavaの演算子について学習しようとしています:- instanceof

しかし、次のコードを実行しようとすると:-

class InstanceofDemo {
public static void main(String[] args) {

    Parent obj1 = new Parent();
    Parent obj2 = new Child();

    System.out.println("obj1 instanceof Parent: "
        + (obj1 instanceof Parent));
    System.out.println("obj1 instanceof Child: "
        + (obj1 instanceof Child));
    System.out.println("obj1 instanceof MyInterface: "
        + (obj1 instanceof MyInterface));
    System.out.println("obj2 instanceof Parent: "
        + (obj2 instanceof Parent));
    System.out.println("obj2 instanceof Child: "
        + (obj2 instanceof Child));
    System.out.println("obj2 instanceof MyInterface: "
        + (obj2 instanceof MyInterface));
}

}

class Parent {}
class Child extends Parent implements MyInterface {}
interface MyInterface {}

コンパイル時に次のエラーが発生します。

./Child.java:1: error: cannot find symbol
class Child extends Parent implements MyInterface{
                                      ^
  symbol: class MyInterface
InstanceOfDemo.java:9: error: cannot find symbol
System.out.println("obj1 instanceOf MyInterface" + (obj1 instanceof MyInterface));
                                                                    ^
  symbol:   class MyInterface
  location: class InstanceOfDemo
InstanceOfDemo.java:12: error: cannot find symbol
System.out.println("obj1 instanceOf MyInterface" + (obj2 instanceof MyInterface ));
                                                                    ^
  symbol:   class MyInterface
  location: class InstanceOfDemo
3 errors

以下は、src コードが配置されているディレクトリ構造です。

-rw-rw-r-- 1 ankit ankit 174 Oct 25 15:36 Child.class
-rw-rw-r-- 1 ankit ankit  31 Oct 25 15:36 Child.java
-rw-rw-r-- 1 ankit ankit 920 Oct 25 15:41 InstanceOfDemo.class
-rw-rw-r-- 1 ankit ankit 637 Oct 25 15:41 InstanceOfDemo.java
-rw-rw-r-- 1 ankit ankit  25 Oct 25 15:20 MyInterface
-rw-rw-r-- 1 ankit ankit 186 Oct 25 15:36 Parent.class
-rw-rw-r-- 1 ankit ankit  16 Oct 25 15:18 Parent.java

注:コードをコンパイルして実行するために、インターフェイスの実装をChild.javaandから削除しました。InstanceOfDemo.java

編集 1:- Oracle による instanceof 演算子の定義は次のとおりであるため、instanceof 演算子をインターフェイスで使用できないと考えることができます:-

instanceof 演算子は、オブジェクトを指定された型と比較します。これを使用して、オブジェクトがクラスのインスタンス、サブクラスのインスタンス、または特定のインターフェイスを実装するクラスのインスタンスであるかどうかをテストできます。

4

5 に答える 5

3

あなたのインターフェースも入っているはず.java fileなので、入れる必要がありMyInterfaceますMyInterface.java

-rw-rw-r-- 1 ankit ankit  25 Oct 25 15:20 MyInterface<---Rename it as 
                                                         MyInterface.java

この後、再度コンパイルすると、すべて正常に動作するはずです

于 2012-10-25T10:27:21.473 に答える
1

ファイルの名前を変更するMyInterfaceMyInterface.java、コードが実行されます

于 2012-10-25T10:32:45.637 に答える
1

問題のファイル リストを見ると、MyInterface に .java 拡張子がありません。

instanceofインターフェイスで確実に使用できます。

「または特定のインターフェースを実装するクラスのインスタンス」の部分について疑問myObj instanceof AnInterfaceがある場合は、myObj が特定のインターフェース、つまり AnInterface を実装するクラスのインスタンスであるかどうかをテストすることを意味します。

于 2012-10-25T10:27:45.047 に答える
1

MyInterface別のファイルで定義されているようで、ファイルの名前はMyInterface.javaでもありません。したがって、.classファイルは生成されません (したがって、コンパイラによって検出されません)。

解決策は、ファイルの名前を変更しMyInterfaceMyInterface.javaコンパイルすることです。これにより、JVM によってロードされる.classファイルが生成されます。

于 2012-10-25T10:28:38.970 に答える
1

MyInterface の名前を MyInterface.java に変更します。ディレクトリ リストとエラー メッセージの両方が、クラス ファイルにコンパイルされていないことに同意します。

于 2012-10-25T10:29:16.530 に答える