0724 闭包和回调

闭包和回调

public class Programmer
{
    public String name;
    public Programmer(String name)
    {
        this.name=name;
    }
    public void work()
    {
      System.out.println(name+"i am a Programmer(i am from parent)");
    }
    public static void main(String[] args)
    {
        Programmer p1=new Programmer("dazhuzhu");
        p1.work();
        System.out.println("xixi");
    }
}
//闭包和回调:适用于
//当接口interface:Teacher和父类class:Programmer
//有相同的函数名 work();
//而且,子类class:TeacherProgrammer(同时也是接口的实现类)
//需要同时实现两个函数的内容

//所以多加一个实现类Closure;
//但是这个实现类Closure,若是放在现子类的外部,不能获得属性

//注意这两个代码不要放在同一个文件内!
interface Teacher
{
     void work();  //同样不要写访问权限
}

public class TestProgrammer extends Programmer
{
    // implements Teacher 不写
    public TestProgrammer(String name)
    {
        //this.name=name;
        super(name); //实现父类
    }
    public void test()
    {
        System.out.println(name+" is a teacher(i am from interface)");
    }
    public class Closure implements Teacher
    {
        public void work()
        {
            test();
        }
        /* 不能这样,因为我是Closure的方法,不是TestProgrammer的方法
           所以这个实现得让TestProgrammer实现
           对的,然后调用!
        public void work()//重写work()函数
        {
            System.out.Println(name+" is a teacher 哟哟(我来自接口实现)");
        }
        */
        /* 这个地方理论上需要这样,但是,回调的意义就在这里
        Closure类作为TestProgrammer类的非静态内部类,
        保存了外部类的引用,所以回调,指的是内部类直接用外部类方法
    
        public void work(TestProgrammer testprogrammer)
        {
            testprogrammer.test();
        }
        */
        //构造一个闭包对象
        //public Closure getnewclousure()  这个地方不对
    }
    public Teacher getnewclosure()  //这个类型是接口
    {
        //这个放在外部类的方法,,而不是内部类
        //Closure c1=new Closure();
        //return c1;
        //直接写成
        return new Closure();
    }
    public static void main(String[] args)
    {
        TestProgrammer tp=new TestProgrammer("xiaozhuzhu");
        tp.work();
        tp.getnewclosure().work(); 

        //生成了一个Closure对象,用这个对象进行work()
        //此时子类使用的是父类Programmer的work函数,显示出程序员的特性,
        //但是没有显示出老师的特性
        //因为若是实现接口,接口的特性也是work()
        //---------IMP

    }
}

枚举类:

posted @ 2014-07-24 15:31  爱吃萝卜干  阅读(94)  评论(0编辑  收藏  举报