最近在做Android recyclerview 封装,在做的点击事件的重写时候,也就是按照网上的方法套路了一遍,自己并没有深入理解。点击事件本质上其实就是接口回调。
对于接口回调,最近通过《thingk in java》一书中我得到了一个启示就是:接口是特殊的抽象类。
而抽象方法不过是特殊的方法而已啊。按照网上的接口回调模式和例子,我用普通的方法模拟了一遍,发现更加好理解了。例子如下:
运行结果为:
通过结果,我们可能会推断,person.whoAreYou(),调用方法可能是Person类中的getName,然后又走重写后的getName,其实不是,被调用的只有被重写的getName,之所以:my name is A,会被输出,是因为,重写的getName中的super.getName()调用父Person中的getName.正是由于Java中这继承初始化顺序的特性,导致了这样的结果,所以千万不要在父类的构造方法中使用可能会被子类重写的方法。
回到正题,我们再将普通的getName方法变为抽象方法(我们意图是,普通——抽象——接口),如下:
这里的输出结果:my name is B.其实写到这一步已经很接近我们平时所谓的接口回调了。执行person.whoAreYou(),这句代码,可以根据上面例子,认为whoAreYou()方法的getName()其实会去自动寻找子类的实现(重写)方法。
我们平时的接口回调是怎么的呢?如下:
这样接口就能实现回调,callback会自动调用他的实现类。跟上面的例子是不是很相似呢?