日期:2014-05-20  浏览次数:20603 次

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楼

在静态方法中不能调用非静态的方法