接口和内部类为我们提供了一种将接口与实现分离的更加结构化的方法。
接口
接口中的方法默认是public abstract方法,所以累在实现接口方法是必须给出方法体,并且一定要用public来修饰,而且接口中的常量默认是public static常量。
接口也是可以被继承的,即可以通过关键字extends声明一个接口是另一个接口的子接口,由于父接口中的方法和常量都是public的,子接口将继承父接口中的全部方法和常量。另外要说的是,接口中的属性都是常量。
接口的意义
你对一些类是否具有这个功能非常关心,但不不关心功能的具体体现,那么就需要这些类都实现一个接口。
接口做参数
如果一个方法的参数是接口类型,就可以将任何实现该接口类的实例的引用传递给该参数,那么该方法就可以通过该接口参数去回调类实现的接口方法。这个比较少用,但是还是挺实用的,后来可以用用。其实这么理解会比较好:直接把该接口参数当做是一个类对象,我们用它来调用该类的方法。
接口回调
接口会有这么一个特征,如果声明一个接口对象,然后调用该接口的方法functionA( ),它会去调用实现该接口的类的方法functionA( ),因此我们可以利用这个特征解决一些问题。比如在拥有ListView的Activity中,点击Item中的一个Button,然后要进行一些与Activity的交互,在BaseAdapter里显然不方便这样操作,这个时候就可以传一个接口对象进去,而接口方法被Activity实现,那就可以利用这个接口对象去调用Activity的方法了。这就是传说中监听者模式。
实例
1.创建一个接口,里面写好需要用到的函数。
public interface ItemChangInterFace {
void deleteCart(String productId);
void setListNum(int num,int whichItem);
}
2.Activity实现该接口。
implements ItemChangInterFace...
@Override
public void deleteCart(final String productId) {...
@Override
public void setListNum(int quantity,int whichItem) {...
3.把该接口对象传入需要调用它的方法的地方,如果是被Activity实现了,那么传this就可以。
cartListAdapter = new CartListAdapter(getActivity(), cartItemList,this);
4.调用的地方声明一个接口对象,接受构造函数来的接口对象,然后就可以用此对象调用被Activity实现的方法。
private ItemChangInterFace itemChangInterFace;
public CartListAdapter(Context context, List<CartItemEntity> list, ItemChangInterFace itemChangInterFace) {
this.itemChangInterFace = itemChangInterFace;
}
itemChangInterFace.deleteCart(list.get(i).getProduct_id());