java基础之接口与抽象类的区别

java基础之接口与抽象类的区别

        抽象类,包含一个抽象方法的类就是抽象类。什么是抽象方法呢?声明而未被实现的方法,抽象方法必须用abstract关键字,抽象类不能直接实例化,都是通过它的子类,即继承抽象类的类来实例化的,而且子类必须重写抽象类中的所有抽象方法。
        接口,接口的关键字是interface, 接口中的成员变量必须是静态的,而且必须是被初始化的,接口中的方法必须全部为abstract,即全为抽象方法。
一个抽象类在android中的简单应用:在实现多布局RecyclerView的时候,holde类,里面要重写绑定数据的方法bindHolder而且几种布局,要实现几次。
第一个布局代码:
public class TypeOneViewholder extends TypeAbstractViewholder {
    private TextView aname;
    private ImageView avatar;

    //初始化中找到控件等
    public TypeOneViewholder(View itemView) {
        super(itemView);
        aname = (TextView) itemView.findViewById(R.id.name1);
        avatar = (ImageView) itemView.findViewById(R.id.avator1);
    }

    //绑定数据,将ViewHoler的数据和Datemodle绑定起来
    public void bindHolder(Datemodle datemodle) {
        aname.setText(datemodle.name);
        avatar.setBackgroundResource(datemodle.avaotorcolor);
    }
第二个布局的代码:
public class TypeTwoViewholder extends TypeAbstractViewholder {
    private TextView aname;
    private ImageView avatar;
    private TextView content;

    //初始化中找到控件等
    public TypeTwoViewholder(View itemView) {
        super(itemView);
        aname = (TextView) itemView.findViewById(R.id.name2);
        avatar = (ImageView) itemView.findViewById(R.id.avator2);
        content = (TextView) itemView.findViewById(R.id.content2);
    }

    //绑定数据,将ViewHoler的数据和Datemodle绑定起来
    @Override
    public void bindHolder(Datemodle datemodle) {
        aname.setText(datemodle.name);
        avatar.setBackgroundResource(datemodle.avaotorcolor);
        content.setText(datemodle.content);
    }
在这里我们就用到了抽象类。将这个bindHolder方法拿出来,代码如下:
public abstract class TypeAbstractViewholder extends RecyclerView.ViewHolder{

    public TypeAbstractViewholder(View itemView) {
        super(itemView);
    }
    public abstract void bindHolder(Datemodle datemodle);
}
像这种我们确定了每一个都需要调用哪个方法,就要把方法设置为abstract类型,但是对于不知道方法要使用几次,有点不需要的时候,抽象类中的这个方法可以不用设置为抽象方法。上面使用了抽象类后,可以在使用的时候
((TypeAbstractViewholder) (holder)).bindHolder(mDates.get(position));
这样就不需要每一个类重新声明一下,一个抽象类就都解决了。

再说明一点:
1、抽象类中的非抽象方法不用重写,其他必须重写,接口的方法必须重写。
2、 接口和抽象类中只有方法名,没有定义的,如果你不定义 也就是空方法,接口就是为了弥补java不能 多重继承 ,接口针对的是对象而不是实现。实现的部分可以交由对象去实现。这就是java中的多态啊。
3、在抽象类这块,还有一种新的机制。IOC机制,控制反转,用法是在父类中定义一个抽象方法,子类中进行实现,父类中调用子类的实现,Android中好多会用到,例如Button的点击事件。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值