default关键词的使用
引子
今天涉及到一个将首页的课程详情页Fragment移动到之前是WebView VIP支付页,能让js调用Java方法能显示课程详情页
不使用default
未使用default关键字,会如下图所示
WebActivity必须实现HomeContract.View接口中的所用接口,才可以使用CourseDetailFragment,然而CourseDetailFragment仅仅使用了HomeContract.View中的remove(Fragment fragment), hideTabs(), orderedCourse(CourseItem courseItem)
hideTabs()隐藏首页的五个tab的回调,防止过度绘制,
orderedCourse(CourseItem courseItem)预约课程成功后的回调到各个fragment,保证各页面的课程预约状态一致,
所以这两个方法在WebActivity也是不会用到的
使用default关键字
使用defalut关键词继承HomeContract.View接口,WebActivity只需实现remove(Fragment fragment),即可保证CourseDetailFragment不改一行代码,而WebActivity仅仅只需要实现remove(Fragment fragment)即可。
总结
其实使用defalut关键字重新写一个接口并未实质上的减少方法数,CourseDetailFragment调用hideTabs()和orderedCourse(CourseItem courseItem)实际上还是调用了一个空方法实现,这样做减少实现类需要实现的方法数,和减少一个继承,这对Java的单继承来说还是比较有用的。
为什么说减少一个继承?
不使用default关键词,如果想要减少一个接口实现的方法数,只能写一个子类来是实现接口,子类中的方法是接口某些方法的空实现,so这就是一个接口变了一个类,接下来再来一个子类继承,复写上一个子类的没有实现的方法。单继承就被使用了,不能继承其他类了。而是使用default关键词后,如下TestImpl没有使用继承
1 | // 使用default |