第一周 关于接口与接口回调

一、接口(英文:Interface)

  • 接口里的方法全是抽象方法(没有构造方法,只能有public static final变量)
  • 接口无法被实例化,但是可以被实现。
  • 如果一个类要用接口 就要实现这个接口里的所有方法/这个类是抽象类

ps:接口类型可用来声明一个变量,他可以成为一个空指针,或是被绑定在一个以此接口实现的对象

public class Demo {
    public static void main(String[] args) {
   //空指针
        Animal cat = null;
        
        
  //绑定对象
        /*该变量只能调用接口中重写的方法,不能调用类中的方法*/
        Animal dog = new Dog();
        dog.Eat();
    }
}

class Dog implements Animal{

    @Override
    public void Eat() {
        System.out.println("啃骨头");
    }
}

   interface Animal{
       public abstract void Eat();

}

二、接口回调

回调

  • 双向调用

  • 反馈结果

    ex:龙哥给我布置作业,我完成作业交给他T.T

  • 回调的目的主要有两个:其一是传递数据,其二是保持数据的同步更新。

  • 常用的有两种形式,一是使用内部类的形式,得到接口的子类对象(这个我不太懂),另一种是直接实现定义的接口。

内部类形式
  • 匿名内部类可以很方便的定义回调🤔

  • 可以很好的实现多继承的效果

  • 如果该方法仅仅调用一次,使用匿名内部类会简化

  • package Demo;
    public class Demo_2 {
        public static void main(String[] args) {
            Print print = new Print();
            onListener listener= new onListener() {
                @Override
                public void OnListener() {
                    System.out.println("我在匿名内部类里被重写了");
                }
    
            };
            print.setOnListener(listener);
            print.text();
        }
    }
    /*一个类*/
    class Print{
        public void work(){
            System.out.println("go to work");
        }
        private onListener listener;
        public void setOnListener(onListener listener) {
            this.listener = listener;//这是回调的关键  获得上面匿名内部类里重写的方法
        }
    
        public void text(){
        /*判空 防止空指针异常*/
            if (listener != null) {
                listener.OnListener();
                System.out.println("我获得了重写的接口里的方法,我可以继续用了T.T");
            }
        }
    }
    /*定义一个接口*/
    interface onListener {
        void OnListener();
    }
    
    
直接实现定义的接口回调
  • 别骂了我就是照着您写了一遍T。T

  • package Demo;
    
    public class Demo_1 {
        public static void main(String[] args) {
            Teath t = new Teath();
            Student s = new Student();
            t.text(s);
        }
    
    }
    
    interface CallBack{
        public abstract void right();
    }
    
    class Teath implements CallBack{
        public void text(Student s){
            System.out.print("1+1=");
            s.write(this);//'this' 指对象t
        }
    
    /*这是重写的回调方法*/
        @Override
        public void right() {
            System.out.println("You are right!");
        }
    
    }
    class Student{
    
        public void write(CallBack callBack){
            System.out.println("2");
               callBack.right();//这里回调
        }
    }
    
Android中的接口回调 ex
  • 安卓开发中有很多点击事件都需要接口回调,像ListView有自带的接口,但是RecycleView就没有。。。

  • /*MyAdapter在适配器设置一个接口*/
    
    private MyClickListener myClickListener;
    
      public interface MyClickListener{
            void onClick(View view, int postion);
        }
        public void setOnClickListener(MyClickListener myClickListener){
            this.myClickListener = myClickListener;
        }
    
    /*然后在onBindViewHolder方法中设置itemview的点击事件*/
     holder.itemView.setOnMyClickListener(new View.OnClickListener() {
                @Override
                public boolean onClick(View v) {
                    myClickListener.onClick(v,position);
                    return true;
                }
            });
    
    
    /*最后在Activity方法中设置点击事件*/
    
    //new一个适配器,用适配器调用点击事件的接口
        myAdapter.setOnClickListener(new MyAdapter.MyClickListener() {
                @Override
                public void onClick(View view,int postion) {
    
                }
            });
    

下面是封装的一个网络请求库(okhttp3的简易替代品)的GitHub链接😄:https://github.com/2019210924/redrock_1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值