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
答案 0 :(得分:4)
这是因为非静态内部类无法在静态方法中实例化,因为它没有要使用的封闭类的实例。
如果将Xyz定义为静态内部类,它应该起作用:
public static class Xyz implements InterfaceSub {
....
}
或者,您可以在封闭类的实例中创建Xyz - 这里不需要这个,但是如果Xyz需要访问封闭类的某些成员变量,则需要这样做。
答案 1 :(得分:3)
替换
Xyz xyz = new Xyz();
与
Xyz xyz = new InterfaceTest().new Xyz();
答案 2 :(得分:2)
您需要在InterfaceTest之外定义Xyz(或更改其可见性)。