Android(java) 接口(interface)的简单使用

一、接口的使用和重写

同一个接口可以有多个不同的实现类,但每一个实现类都必须重写接口中所有的抽象方法。即接口不考虑这些实现类各自采用什么方式实现这些功能,但它要求所有的实现类都必须有这些功能。
1:首先定义一个计算器的接口

public interface Calculator {
    /** 两个数的和 int类型返回值*/
    int add(int a, int b);
    /** 两个数的差 int类型返回值*/
    int sub(int a, int b);
    /** 两个数的积 long类型返回值*/
    long mul(int a, int b);
    /** 两个数的商 float类型返回值*/
    float div(int a, int b);
}

2:定义一个实现该接口的类,该类可以多种(BCalculator,CCalculator,DCalculator等),接口其中一个作用是规范。

public class ACalculator implements Calculator {
    @Override
    public int add(int a, int b) {
        return a + b;
    }

    @Override
    public int sub(int a, int b) {
        return a - b;
    }

    @Override
    public long mul(int a, int b) {
        return a * b;
    }

    @Override
    public float div(int a, int b) {
        return (float) a / (float) b;
    }
}

3:调用接口
//实列话的是ACalculator,也可以实列化BCalculator,CCalculator,DCalculator等,实列化哪个调用哪个逻辑,返回哪个逻辑的结果

Calculator calculator = new ACalculator();
        int sum = calculator.add(11, 11);
        //sum ==22

接口的意义:这样写有什么好处呢?直接写逻辑不用接口不是更省事吗?是的,单人小功能开发没有问题。多人开发复杂功能这样可以标准一下协议,解耦算法和逻辑,提高多人开发的效率。

二、接口的回调问题

一般情况下主线程是不执行耗时任务的,如果遇到一些耗时任务(如网络请求,文件读写,数据库读写等等),我们会将其放入子线程中去执行,当执行完毕后,子线程再将执行结果返回给主线程。这个过程就是回调。
1:定义一个读取数据的回调接口

public interface OnReadDataCallback {
    /** 获取信息成功 */
    void onSuccess(String data);
    /** 获取信息失败 */
    void failure();
}

2:定义一个用于获取信息的任务类

public class dataService {
    private OnReadDataCallback callback;
    public dataService(OnReadDataCallback callback) {
        this.callback = callback;
    }

    public void getData() {
        // 模拟一个耗时操作
        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    Thread.sleep(5000);
                    // 读取成功
                    callback.onSuccess("结果是:" + new Date());
                } catch (InterruptedException e) {
                    // 读取失败
                    callback.failure();
                }
            }
        });
        thread.start();
    }
}

3:回调使用

public class MainActivity extends AppCompatActivity implements OnReadDataCallback {
    private static final String TAG = "MainActivity";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

   //获取数据
    public void readData(View view) {
        readDataService service = new readDataService(this);
        service.getData();
    }

    @Override
    public void onSuccess(String data) {
        //成功处理数据更新ui 
    }

    @Override
    public void failure() {
       //弹框提示失败
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值