首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

Java内部类的一个编译异常,帮小弟我看看

2013-11-23 
Java内部类的一个编译错误,帮我看看我用Netbeans+jdk1.7写了一个非常小的程序:public class JavaApplicati

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楼

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

热点排行