加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

为什么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

这对我来说很奇怪:
1.在m.f()成员函数中,我们可以“sub1 s1 = new sub1();”,但在main中,我们不能
2. staic class sub2可以有实例,而非静态sub1不能吗?

这是Java的设计吗?为什么?

解决方法

>非静态内部类被视为外部类的成员.
>要创建实例,需要使用外部类的引用.

所以你必须做这样的事情,

OuterClass outer = new OuterClass();
InnerClass inner = outer.new InnerClass();

所以,在你的情况下,

m obj = new m();
sub1 s1 = obj.new Sub1();

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读