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 } }
枚举类: