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

您需要在 InterfaceTest 之外定义 Xyz(或更改它的可见性)。

于 2012-07-31T04:48:28.020 回答