Why do I get "non-static variable this cannot be referenced from a static context"?
compiler-errors, java, non-static, subclass
Solution
Your nested class (which isn't a subclass, by the way) isn't marked as being static, therefore it's an inner class which requires an instance of the encoding class (JavaApp1) in order to construct it.
Options:
- Make the nested class static
- Make it not an inner class (i.e. not within `JavaApp1` at all)
Create an instance of `JavaApp1` as the "enclosing instance":
GenTest x = new JavaApp1().new GenTest();
Personally I'd go with the second approach - nested classes in Java have a few oddities around them, so I'd use top-level classes unless you have a good reason to make it nested. (The final option is particularly messy, IMO.)
See section 8.1.3 of the JLS for more information about inner classes.
Problem
I have a very simple class which I want to use as a subclass of another one. But when I put its code in the parent's class I get : non-static variable this cannot be referenced from a static context On the other hand when I put the sublass `GenTest`'s class code outside the the "parent's" class code - `JavaApp1` I do not get this error. ``` 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(); } } ``` Why is this happening ?