class Outer{
static int a=10;
int b=20;
static void f(){
System.out.println("hi~~~");

}
static class Inner{
int c=30;
public void g(){
f();
System.out.println(a+" "+c);
}
}

}
public class TestStaticClass{public static void main(String[] args){
Outer in=new Outer();
in.g();
}
}
Inner类为Outer类的静态类,我创建了Outer类的对象,为什么不能直接调用g(),Inner不是静态的吗,不是可以不用创建他的对象了吗,请高手说明下好吗,谢谢~~

解决方案 »

  1.   

    Inner是静态的嵌套类它只能在Outer类中使用
      

  2.   

    Outer.Inner  oi = new Outer().new Inner();
    oi.g();
      

  3.   

    static class Inner{
    int c=30;
    public static void g(){
    f();
    System.out.println(a+" "+c);
    }
    }
    调用时 in.Inner.g();
      

  4.   

    按照报错信息,我认为有可能是static只是对类定义为静态,但是里面的方法还是要等new对象的时候才能产生.
      

  5.   

    class Outer{
    static int a=10;
    int b=20;
    static void f(){
    System.out.println("hi~~~"); }
    static class Inner{
    static int c=30;
    public static void g(){
    f();
    System.out.println(a+" "+c);
    }
    }
    }
    public class TestStaticClass{public static void main(String[] args){
    //Outer in=new Outer();
    Outer.Inner.g();
    }
    }
    可以这么写,把内部类和内部类中的方法全写成静态的,这样就可以直接用类名去访问
      

  6.   

    class Outer2{
    static int a=10;
    int b=20;
    static void f(){
    System.out.println("hi~~~"); }
    class Inner2{
    int c=30;
    void g(){
    f();
    System.out.println(a+" "+c);
    }
    }
    void g(){
    Inner2 inner2=new Inner2();
    inner2.g();
    }}
    public class TestStaticClass2{public static void main(String[] args){
    Outer2 in=new Outer2();
    in.g();
    }
    }
    也可以这么写,在外部类中定义一个方法,
    在方法中生成一个内部类,
    这样可以直接调用内部类中的方法
      

  7.   

    class Outer3{
    static int a=10;
    int b=20;
    static void f(){
    System.out.println("hi~~~"); }
    class Inner3{
    int c=30;
    void g(){
    f();
    System.out.println(a+" "+c);
    }
    }
    /*void g(){
    Inner2 inner2=new Inner2();
    inner2.g();
    }*/
    Inner3 getInner3(){
    return new Inner3();
    }
    }
    public class TestStaticClass3{public static void main(String[] args){
    Outer3 in=new Outer3();
    Outer3.Inner3 inner3 =in.getInner3();
    inner3.g();
    }
    }
    还可以写成这样,
    这样可以直接在main中生成内部类的对象
    然后直接调用内部类的方法
      

  8.   

    g方法不是在static class Inner里么?