public class Test {
class Foo {
int frob() {
return 7;
}
}
class Bar extends Foo {
@Override
int frob() {
return 8;
}
}
class Baz extends Foo {
@Override
int frob() {
return 9;
}
}
public static int quux(Bar b) {
return b.frob();
}
public static void main(String[] args) {
System.out.println(quux(new Bar()));//this line gives non-static variable this cannot be referenced from a static context
}
}
问问题
58 次
3 回答
3
您可以通过将嵌套类声明为static或通过在Test实例的上下文中实例化Bar来解决此问题。
它失败是因为(非静态)Bar必须在现有Test类实例的上下文中实例化;由于main是静态的,因此没有这样的野兽。
于 2012-12-01T05:27:40.587 回答
3
public static void main(String[] args) {
Test test = new Test();
System.out.println(quux(test.new Bar()));
}
于 2012-12-01T05:28:42.073 回答
2
非静态内部类具有对封闭类实例的隐藏引用。这意味着您必须有一个封闭类的实例才能创建内部类。您还必须使用一个特殊的“新”函数来正确初始化对封闭类的隐藏引用。例如,
class Outer{
class Inner{
public Inner() {
System.out.println("Hello there.");
}
}
public static void main(String args[]) {
Outer o = new Outer();
Outer.Inner i = o.new Inner();
}
}
于 2012-12-01T05:39:29.930 回答