我有一个非常简单的类,我想用作另一个的子类.但是当我把它的代码放在父级的类中时,我得到:
non-static variable this cannot be referenced from a static context
@H_404_5@另一方面,当我把GenTest子类的代码放在“父”的类代码之外 – JavaApp1时,我没有得到这个错误.
public class JavaApp1 { class GenTest { @Deprecated void oldFunction() { System.out.println("don't use that"); } void newFunction() { System.out.println("That's ok."); } } public static void main(String[] args) { GenTest x = new GenTest(); x.oldFunction(); x.newFunction(); } }为什么会这样?
解决方法
您的嵌套类(不是子类,顺便说一下)没有标记为静态,因此它是一个内部类,它需要编码类(JavaApp1)的一个实例来构造它.
选项:
>使嵌套类静态化
>使它不是内部类(即根本不在JavaApp1中)
>创建JavaApp1的实例作为“封闭实例”:
GenTest x = new JavaApp1().new GenTest();
就我个人而言,第二种方法 – Java中的嵌套类在它们周围有一些怪异的东西,所以我会使用顶级类,除非你有一个很好的理由让它嵌套. (最后的选择是特别凌乱,IMO.)
有关内部类的更多信息,请参阅section 8.1.3 of the JLS.