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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© cehkongfu 中级黑马   /  2012-10-12 23:20  /  1411 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Outer
{
private static  int x = 3;

class Inner
{
  void function()
  {
   System.out.println("inner :"+x);
  }
}
}

class  InnerClassDemo2
{
public static void main(String[] args)
{
  Outer.Inner in = new Outer().new Inner();
  in.function();
}
输出结果  inner: 3
================================================

class Outer
{
private static  int x = 3;

static class Inner
{
  static void function()
  {
   System.out.println("innner :"+x);
  }
}
}

class  InnerClassDemo2
{
public static void main(String[] args)
{
  Outer.Inner in = new Outer().new Inner();
  in.function();
}
}
这段程序就报错了, 仅仅就多了一个static  为什么呢?

评分

参与人数 1技术分 +1 收起 理由
尤圣回 + 1 神马都是浮云

查看全部评分

4 个回复

倒序浏览
.内部类可以直接访问外部类的成员,包括私有成员。
内部类之所以可以直接访问外部类中的成员。是因为内部类中持有一个外部类的的引用,格式 外部类名.this
然而静态方法中不可能有this和super关键字,所以不可以!

评分

参与人数 1技术分 +1 收起 理由
尤圣回 + 1 赞一个!

查看全部评分

回复 使用道具 举报
static 可以修饰 类名么?
回复 使用道具 举报
本帖最后由 我是菜鸟 于 2012-10-13 00:15 编辑

public class A
{
        public static class B
        {
                public void fun()
                {
                        System.out.println("OK");
                }
        }
        public class C
        {
                public void fun()
                {
                        System.out.println("OK");
                }
        }
        public static void main(String[] args)
        {
                A a = new A();
                A.B ab = new A.B();//静态内部类(方法),访问格式:外部类.内部类()
                A.C b = a.new C();//成功
                A.C c = new A().new C();//成功
        }
}

评分

参与人数 1技术分 +1 收起 理由
尤圣回 + 1 赞一个!

查看全部评分

回复 使用道具 举报
static可以修饰类成员位置上的内部类,但是这是内部类只能访问外部类中的static成员。这里要访问function,可以直接用类名调用Outer.Inner.function();静态成员是随类的,与对象无关的,若想创建静态内部类对象,可以Outer.Inner in = new Outer.Inner();即不能用外部类的对象来调用静态内部类的构造方法。

评分

参与人数 1技术分 +1 收起 理由
尤圣回 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马