2
public class InterfaceTest {
    interface  InterfaceA {
         int  len =  1 ;
         void  output();
    }

    interface  InterfaceB {
           int  len =  2 ;
           void  output();
    }

    interface  InterfaceSub  extends  InterfaceA, InterfaceB {            }

    public class Xyz implements  InterfaceSub {

         public   void  output() {
            System.out.println( "output in class Xyz." );
        }

          public   void  outputLen(int  type) {
              switch (type) {
                      case  InterfaceA.len:
                             System.out.println( "len of InterfaceA=." +type);
                              break ;
                      case  InterfaceB.len:
                             System.out.println( "len of InterfaceB=." +type);
                              break ;
             }
        }
    }

    public   static   void  main(String[] args) {
           Xyz xyz = new Xyz();
           xyz.output();
           xyz.outputLen(1);
   }
}

こんにちは、Java のインターフェースと多重継承の概念を学びたいと思っています。上記のコードを見つけてコンパイルしようとしましたが、以下のエラーが発生します。コードを機能させる方法がわかりません。誰が助けてくれますか? ありがとう!

test$ javac InterfaceTest.java 
InterfaceTest.java:33: error: non-static variable this cannot be referenced from a static context
           Xyz xyz = new Xyz();
                     ^
1 error
4

3 に答える 3

4

これは、静的メソッドで非静的内部クラスをインスタンス化できないためです。これは、動作するエンクロージング クラスのインスタンスがないためです。

Xyz を静的内部クラスとして定義すると、動作するはずです。

public static class Xyz implements InterfaceSub {
  ....
}

別の方法として、囲んでいるクラスのインスタンス内に Xyz を作成することもできます。これはここでは必要ありませんが、Xyz が囲んでいるクラスのメンバー変数にアクセスする必要がある場合に必要になります。

于 2012-07-31T04:50:36.207 に答える
3

交換

Xyz xyz = new Xyz();

 Xyz xyz = new InterfaceTest().new Xyz();
于 2012-07-31T04:49:17.630 に答える
2

Xyz を InterfaceTest の外で定義する (または可視性を変更する) 必要があります。

于 2012-07-31T04:48:28.020 に答える