Java内部类的一个编译错误,帮我看看
我用Netbeans+jdk1.7写了一个非常小的程序:
public class JavaApplication1 {
/**
* @param args the command line arguments
*/
public class Base
{
public Base() { f(); }
public void f() { System.out.println("Base"); }
}
public class Derived extends Base
{
public Derived() { f(); }
public void f() { System.out.println("Derived"); }
}
public static void main(String[] args) {
// TODO code application logic here
JavaApplication1.Base pb = new JavaApplication1.Derived();
}
}
提示main函数中唯一的一句话有错误,"non-static variable cannot be referenced from a static context. May split declaration into a declaration and assignment".
这到底是什么意思?
------解决方案--------------------public class Base
修改为:
public static class Base
Derived 也是。
------解决方案--------------------第18行:
JavaApplication1.Base pb = new JavaApplication1.Derived();
你写的等号右边那部分是用来定义静态内部类的。
要想定义普通内部类,应该写成:
JavaApplication1 ja1 = new JavaApplication1();
JavaApplication1.Base pb = ja1.new Derived();
试试吧~
定义普通内部类对象时必须有一个外围类(如本例中的JavaApplication1类)对象与之对应。
------解决方案--------------------由于是在外围类(JavaApplication1)的内部定义内部类对象,所以甚至可以简化成:
JavaApplication1 ja1 = new JavaApplication1();
Base pb = ja1.new Derived();
------解决方案--------------------Base Derived? 现在JavaApplication1? 外试试。
------解决方案--------------------public class Base
修改为:
public static class Base
Derived 也是。 引用1楼
在静态方法中不能调用非静态的方法