我有一个非常简单的类,想用作另一个类的子类。但是,当我将其代码放入父类时,我得到:
非静态变量,不能从静态上下文中引用
另一方面,当我将sublass GenTest的类代码放在“父母的”类代码之外时,JavaApp1我不会收到此错误。
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)的实例。
选项:
GenTest x = new JavaApp1().new GenTest();
就我个人而言,我会采用第二种方法- Java中的嵌套类在它们周围有一些怪异之处,因此除非您有充分的理由将其嵌套,否则我将使用顶级类。(IMO的最终选择特别麻烦。)
有关内部类的更多信息,请参见JLS的8.1.3节。