最近看了一片文章,其中讲到了内隐类,不是很明白,希望大家给我讲解一下

解决方案 »

  1.   

    给你看个我学inner类的测试代码:
    class Outer
    {
    private int index = 100;
    private int test1 = 999;
    static int stFlag =88;
    //在非静态的内部类中不能定义静态的成员变量和方法!只有在顶层类中才能定义static变量和方法!
    class Inner
    {
    private int test2 = 99;
    int index = 10;
    void print()
    {
    int test3 = 9;
    int index = 1;
    System.out.println("index: " + index);
    System.out.println("this.index: " + this.index);
    System.out.println("Outer.this.index: " + Outer.this.index);
    System.out.println("test1: " + test1);
    System.out.println("test2: " + test2);
    System.out.println("test3: " + test3);
    }
    }
    Inner print()
    {
    return new Inner();
    }
    /************************************************************/
    static class stInner
    {
    static int saticF = 0;
    int flag = 8;
    void print()
    {
    System.out.println("在静态类stInner中:");
    System.out.println("saticF: " + saticF);
    System.out.println("flag: " + flag);
    System.out.println("stFlag: " + stFlag);
    }
    static void stPrint()
    {
    System.out.println("在静态类stInner的静态方法中:");
    System.out.println("saticF: " + saticF);
    System.out.println("stFlag: " + stFlag);
    }
    }
    /************************************************************/
    //在函数中定义的类如果要引用函数里的变量则变量必须是final形式
    void func(final int a)
    {
    final int b = 0;
    if(true)
    {
    class Middle
    {
    int index = 101;
    class InInner
    {
    int index = 102;
    void print()
    {
    int index = 103;
    System.out.println("测试在InInner类中:");
    System.out.println("index: " + index);
    System.out.println("this.index: " + this.index);
    System.out.println("Middle.this.index: " + Middle.this.index);
    System.out.println("Outer.this.index: " + Outer.this.index);
    System.out.println("a: " + a);
    System.out.println("b: " + b);
    }
    }
    }
    Middle d = new Middle();
    Middle.InInner in = d.new InInner();
    in.print();
    }
    }
    //注意区分类外和类内的调用内部类的不同方法。比较Test中的main方法!
    public static void main(String[] args)
    {
    Outer outer = new Outer();
    //如果直接Inner inner = new Inner();是不行的,因为main方法是一个静态的方法。
    //Inner类可以看成是Outer类的一个成员变量,静态方法是不能直接访问该类的非静态成员。
    //所以必须先调用Outer outer = new Outer();生成一个Outer类的变量,然后通过该outer
    //变量再去生产Inner类的实例。
    Inner inner = outer.new Inner();
    inner.print();
    outer.func(5);

    stInner.stPrint();
    stInner stIn = new stInner();
    stIn.print();
    }
    }/************************************************************/
    /************************************************************/
    /************************************************************/
    //注意Test1类和Test2类的区别
    class Test1 extends Outer.stInner
    {
    public static void main(String[] args)
    {
    Outer outer = new Outer();
    Outer.Inner i = outer.new Inner();
    Outer.Inner inner = outer.print();
    inner.print();
    outer.func(5);

    Outer.stInner.stPrint();
    Outer.stInner stIn = new Outer.stInner();
    stIn.print();
    }
    }
    /************************************************************/
    class Test2 extends Outer.Inner
    {
    //要建立如下的构造函数,来生成Outer类的实例,才能生产内部类Inner
    Test2(Outer outer)
    {
    outer.super();
    }

    public static void main(String[] args)
    {
    Outer outer = new Outer();
    Outer.Inner i = outer.new Inner();
    Outer.Inner inner = outer.print();
    inner.print();
    outer.func(5);

    Outer.stInner.stPrint();
    Outer.stInner stIn = new Outer.stInner();
    stIn.print();
    }
    }
      

  2.   

    我不知道这个问题的答案,但是我知道在哪里可以找到这个问题的答案。
    <<Thinking in Java>>里面讲到内隐类时专门有这方面的介绍。