为什么java不允许创建内部类的实例?
发布时间:2020-12-15 04:36:20 所属栏目:Java 来源:网络整理
导读:参见英文答案 Java inner class and static nested class????????????????????????????????????25个 我有一个主类“m”和2个内部类叫做sub1,sub2,其中sub2是静态类: public class m{ String n="n"; static String s="s"; public class sub1 { public void f
参见英文答案 >
Java inner class and static nested class????????????????????????????????????25个
我有一个主类“m”和2个内部类叫做sub1,sub2,其中sub2是静态类: public class m { String n="n"; static String s="s"; public class sub1 { public void fn(){System.out.println(n);} //static public void fs(){System.out.println(s);} } static class sub2 { //public void fn(){System.out.println(n);} static public void fs(){System.out.println(s);} } public void f() { sub1 s1=new sub1();//OK,no error sub2 s2=new sub2();//OK } public static void main(String[] args) { m obj=new m(); sub1 s1=new sub1();//Error s1.fn(); //s1.fs(); sub2 s2=new sub2();//OK //s2.fn(); s2.fs(); } } 我使用Openjdk在linux下编译它,它报告错误 $java -version openjdk version "1.8.0_91" OpenJDK Runtime Environment (build 1.8.0_91-8u91-b14-3ubuntu1~16.04.1-b14) OpenJDK 64-Bit Server VM (build 25.91-b14,mixed mode) $javac m.java m.java:24: Error: Cannot reference non-static variable this in a static context. sub1 s1=new sub1();//Error ^ 1 Errors 这对我来说很奇怪: 这是Java的设计吗?为什么? 解决方法
>非静态内部类被视为外部类的成员.
>要创建实例,需要使用外部类的引用. 所以你必须做这样的事情, OuterClass outer = new OuterClass(); InnerClass inner = outer.new InnerClass(); 所以,在你的情况下, m obj = new m(); sub1 s1 = obj.new Sub1(); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |