callback的理解与Java实例
对callback,暂时的理解是:A对象调用B接口的b方法,b方法又反过来调用A对象中的c方法。
A调用B接口时把自身给B接口,至于怎么处理,由B的实现类去做,不关A的事。
写了个例子,BadBoy,这类坏孩子喜欢打人,有个方法叫hit,hit只能对实现了Hitable的对象执行。这时候,BadBoy已经做完了自己的事,也就是已经打完人了,然后挨打的人肯定知道是谁打了自己,至于挨打的人是什么反应,BadBoy是无法控制的。挨打的人有可能哭有可能跑有可能报警。
BadBoy:
class BadBoy {String name;public BadBoy(String name) {this.setName(name);}public String getName() {return name;}public void setName(String name) {this.name = name;} //打人public void hit(Hitable hitable) {System.out.println("----------------BEGIN----------------");System.out.println("badboy " + this.getName() + "打了"+ hitable.getName() + "一拳");hitable.beHit(this);System.out.println("-----------------END----------------");}}interface Hitable {public void beHit(BadBoy boy);public String getName();public void setName(String name);}class Child implements Hitable {String name;public Child(String name) {this.setName(name);}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic void beHit(BadBoy boy) {System.out.println("child " + this.getName() + "被" + boy.getName()+ "打哭了");}}class BigMan implements Hitable {String name;public BigMan(String name) {this.setName(name);}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic void beHit(BadBoy boy) {System.out.println("bigman " + this.getName() + "把" + boy.getName()+ "杀死了");}}public class CallBackTest {public static void main(String[] args) {BadBoy badboy = new BadBoy("Tom");Hitable child = new Child("Cat");Hitable bigman = new BigMan("Boris");badboy.hit(child);badboy.hit(bigman);}}----------------BEGIN----------------badboy Tom打了Cat一拳child Cat被Tom打哭了-----------------END--------------------------------BEGIN----------------badboy Tom打了Boris一拳bigman Boris把Tom杀死了-----------------END----------------