A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 江大海 于 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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
曹睿翔 + 1 神马都是浮云

查看全部评分

4 个回复

倒序浏览
静态调用非静态,创建对象调用。代码new Inner2().show()相当于 Inner2 in = new Inner2();
                                                               in.show();
============================================================
回复 使用道具 举报
new Inner2().show();
你这里new了一个对象,用对象来调用的,这是匿名对象调用方法,相当于
Inner2 i= new Inner2();   
i.show();
回复 使用道具 举报
是因为你已经创建对象了,对象就可以调用该类里的所有方法和变量,如果你直接写show();这样就不对,本类这种情况下没有权限去访问它。

评分

参与人数 1技术分 +1 收起 理由
曹睿翔 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
liuelxiwd 发表于 2013-5-8 10:11
是因为你已经创建对象了,对象就可以调用该类里的所有方法和变量,如果你直接写show();这样就不对,本类 ...

哦,知道了,我说怎么回事,谢谢啦,学习了:lol
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马