抽象类与接口的异同点

先上代码,后面对照代码分析

 interface MyInterface{
        //此处省略了 final 和 修饰符信息 完整的为public final int i=0;
        //它是一个静态共有的常量
        int i=0;

        //此处省略了abstract修饰符 完整的为abstract void onItem();
        //说明接口中的方法必须是抽象方法
        void onItem();
    }


    /**
     * 抽象类中的方法可以是抽象方法,也可以是非抽象方法
     */
    abstract class AbstractClass{
        //普通的类中变量 可以进行赋值改变
        int j = 0;
        boolean isLoading = false;
        //普通类中的方法 可以提前做一些初始化操作 比如isLoading = true;
        //那么实现它的子类将会共同拥有这个字段属性
          void onItem2(){
              isLoading = true;
          }
          //抽象方法
          abstract void onItem3();

    }


    class  MyClass implements  MyInterface{
        //必须实现抽象方法
        @Override
        public void onItem() {
        }
    }

    class  MyClass2 extends AbstractClass{
        //必须实现抽象方法
        @Override
        void onItem3() {
            j++;
        }
    }

    /**
     * 抽象子类可以不实现接口的抽象方法
     */
    abstract class  MyClass3 implements  MyInterface{

       /* @Override
        public void onItem() {
        }*/
    }
    /**
     * 抽象子类可以不实现抽象父类的抽象方法
     */
    abstract class  MyClass4 extends AbstractClass{

       /* @Override
        void onItem3() {

        }*/
    }

区别:

  • 抽象类的修饰符是abstract ,接口的修饰符是interface 。另外对于实现的子类来说,有extends 和 implements  之分
  • 接口中的变量是public final 类型的共有常量,不能修改。抽象类中的变量可以进行修改赋值操作;。比如i,j
  • 接口中的方法必须是抽象方法,而抽象类中的方法可以不是抽象方法,我们可以在非抽象方法中进行一些初始化操作,那么子类将会持有该属性,比如例子中的isLoading 字段
  • 对于非抽象子类来说,必须实现或继承 接口或抽象类中的所有抽象方法 比如MyClass和MyClass2
  • 对于抽象子类来说,可以不用实现或继承这些方法。比如MyClass3和MyClass4

相同点:

  • 接口中的方法一定是抽象方法,抽象类的方法可以抽象方法,并且抽象方法一定是没有方法体的
  • 抽象类和接口都不能被定义为私有的或final的,否则不能被继承或实现。

现实中的应用:

比如我们的BaseActivity与BaseFragment一般都是声明为抽象类,因为我们可以进行一些初始化操作,然后在基类中定义一个抽象方法,供子类调用。当所有的初始化操作都完成以后,子类就可以重写该方法进行其他操作了,比如网络请求等等。

 

对于接口的话一般用于数据回调,比如网络请求,异步加载等。适配器中adpter的事件点击等。

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值