黑马程序员技术交流社区

标题: 关于外部类成员访问静态内部类中的非静态成员 [打印本页]

作者: 江大海    时间: 2013-5-8 08:13
标题: 关于外部类成员访问静态内部类中的非静态成员
本帖最后由 江大海 于 2013-5-8 18:07 编辑

静态方法不是只可以访问静态成员吗?为什么可以访问非静态的成员,代码展示如下
  1. class Outer
  2. {
  3.         private static  int x = 3;

  4.         
  5.         static class Inner//静态内部类
  6.         {
  7.                 static void function()
  8.                 {
  9.                         System.out.println("innner :"+x);
  10.                 }
  11.         }

  12.         static class Inner2//静态内部类
  13.         {
  14.                 void show()
  15.                 {
  16.                         System.out.println("inner2 show");
  17.                 }
  18.         }

  19.         public static void method()
  20.         {
  21.                 //Inner.function();
  22.                 new Inner2().show();//为什么静态方法可以访问非静态成员??
  23.         }

  24. }
复制代码

作者: 汪平乐    时间: 2013-5-8 09:05
静态调用非静态,创建对象调用。代码new Inner2().show()相当于 Inner2 in = new Inner2();
                                                               in.show();
============================================================
作者: 邹铭钰    时间: 2013-5-8 09:12
new Inner2().show();
你这里new了一个对象,用对象来调用的,这是匿名对象调用方法,相当于
Inner2 i= new Inner2();   
i.show();
作者: liuelxiwd    时间: 2013-5-8 10:11
是因为你已经创建对象了,对象就可以调用该类里的所有方法和变量,如果你直接写show();这样就不对,本类这种情况下没有权限去访问它。
作者: 江大海    时间: 2013-5-8 18:07
liuelxiwd 发表于 2013-5-8 10:11
是因为你已经创建对象了,对象就可以调用该类里的所有方法和变量,如果你直接写show();这样就不对,本类 ...

哦,知道了,我说怎么回事,谢谢啦,学习了:lol




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2