java===内部类与匿名内部类

package cn.china;
class body{
     String name="hand";
    class head{
        String nString="foot";
        void show(){
            System.out.println(name+this.nString);
        }
    }
    public void accept(){
        head h=new head();
        h.show();
    }
}
public class Demo1 {

    public static void main(String[] args) {
        new body().accept();
        body.head in=new body().new head();
        in.show();
        // TODO Auto-generated method stub

    }

}
package cn.china;
/**内部类的修饰符
 * private 私有
 * static 修饰的内部类 实例化格式outer.inner in=new outer.inner();outer直接调用静态类,然后
 * new内部类的对象就可以了;如果内部类是静态的,里面成员也是静态的,就可以直接“外部类名.内部类名.方法名”调用
 * 还需要注意,内部类中如果有静态成员,这个内部类必须是静态的*/
class outer{
    static int num=5;
    static class inner{
        void show1(){
            System.out.println("inner   run1"+num);
        }
        static void show2(){
            System.out.println("inner   run2"+num);
        }
    }
}
public class Demo2 {

    public static void main(String[] args) {
        outer.inner in=new outer.inner();
        in.show1();
        outer.inner.show2();
        // TODO Auto-generated method stub

    }

}
package cn.china;
abstract class 水果{
    abstract void eat();
}
class Person{
    void method(){
    new 水果()//实际上这就是一个子类对象
    {
        void eat()
        {
            System.out.println("人吃西红柿");
        }
        void play(){//需要注意如果要调用这个方法,需要注意用子类对象调用,如果向上转型父类中没有此方法编译会失败
            System.out.println("haha");
        }
    }.play();
    }
}


public class Demo3 {

    public static void main(String[] args) {
        new Person().method();
        // TODO Auto-generated method stub

    }

}
package cn.china;
class outer4{
    int num=4;
    void method(){
        final int x=9; //局部内部类访问局部变量,这个局部变量必须是常量,要用final修饰
        class inner{
            void show(){
                System.out.println("show   run"+num);
            }
            void function(){
                System.out.println("function   run"+x);
            }
        }
        inner in=new inner();
        in.function();
        in.show();
    }
}
public class Demo4 {

    public static void main(String[] args) {
        outer4 o=new outer4();
        o.method();
        // TODO Auto-generated method stub

    }

}
package cn.china;



interface A{
    void show1();
    void show2();
}
class outer5{
    void method(){
    A a=new A(){//向上转型
        public void show1(){System.out.println("show1  run");}
        public void show2(){System.out.println("show2  run");}
    };//注意分号结尾
    a.show1();
    a.show2();
    }
}
public class Demo5 {

    public static void main(String[] args) {
        new outer5().method();
        // TODO Auto-generated method stub
        function(new A()//这种使用方法,只能是接口内方法不能超过3个,不然影响易读性
        {
            public void show1(){System.out.println("show1   run");}
            public void show2(){System.out.println("show2   run");}
        });

    }
    /**关于匿名内部类的应用之一*/
    public static void function(A a){
        a.show1();
        a.show2();
    }

}
原文地址:https://www.cnblogs.com/wangyinxu/p/6565353.html