Interface InnerClass {
    int getNum();
}
public class AnonymInnerClass {
    
    public InnerClass getInnerClass(final int num, String str) {
        return new InnerClass() {
            int number = num + 3;
            
            public int getNum() {
                reurn number;
            }
        };
    }
    public static void main(String[] args) {
        AnonymInnerClass anonymInnerClass = new AnonymInnerClass();
        InnerClass inner = anonumInnerClass.getInnerClass(4, "test");
        System.out.println(inner.getNum());
    }
}
// 输出结果:7
	1. 非静态内部类有着一个指向外部类对象的引用。
2. 普通内部类对象的创建:
? ? ? ? Outer o = new Outer();
? ? ? ? Outer.Inner in = o.new Inner();
3. 当内部类的属性与外部类同名时,会覆盖外部类的同名属性。
4. 如果要生成外部类对象的引用,可以使用 OuterClassName.this ,这样就可以产生一个正确的外部类引用了。
5. 内部类是一个编译时概念,一旦编译成功,它就与外围类属于两个完全不同的类(联系:内部类含有外部类对象的引用)。
6. 成员内部类可以无限制的访问外部类的属性和方法(包括 private),但是外部类要访问内部类的成员属性和方法,则需要通过内部类实例来访问。
7. 成员内部类的两个注意点:
? ? ? ? 1) 成员内部类不能存在任何 static 类型的变量和方法。
? ? ? ? 2) 成员内部类是依附与外围类的,只有先创建了外部类,才能够创建内部类。
public class OutClass {
    private String name;
    private int age;
 
    class Inner {    // 内部类可以访问外部类所有属性和方法
        public void printName() {
            System.out.println(name);
        }
        public void setName(String str) {
            OutClass.this.name = str;
            System.out.println(OutClass.this.name);
        }
        private String name = "inner name";
        public void print(){
            System.out.println(name);
            System.out.println(OutClass.this.name);
        }
    }
    // 外部类调用内部类的方法
    public void outInvokeInner(){
        Inner in = new Inner();
        System.out.println("outer invoke inner");
        in.print();
    }
    public static void main(String[] args) {
        OutClass out = new OutClass();
        OutClass.Inner in = out.new Inner();
        in.printName();
        in.setName("Hello");
        in.print();
        
        out.outInvokeInner();    // 外部类调用内部类方法
    }
}
/**
* 输出:
* inner name
* Hello
* inner name
* Hello
* Outer invoke inner
* inner name
* Hello
*/
	?