Java Interface的真正用途

对 java 接口,在很多教程中的教学,只是如下的介绍:

1、接口类只定义一些抽像的方法
2、要有实现类实些这些接口的方法,才能用
3、接口是可以多继承
等等的学习........

然后,学到的就是接口好像和我们理解中的现实的接口完全无法对应上。

下面是我在简书中看到的比较好理解接口核心作用的两个文:

作者:js果冻柠檬 链接:https://www.jianshu.com/p/90c6ce8974aa

1、接口的作用
但是我认为上面的解释只给出了 java 接口中很小很小的作用,或者说不能体现“接口”这两个字的含义。关于接口,我是这样理解的,举一个比较形象的例子:小明数学比较好,可以计算两数相加,其方法为 add(int a, int b);小红就不行了,数学比较差,自己做不来。但是数学老师又给小红布置了数学作业,而且明天必须要交作业。假如你是小红,你会怎么办?当然是求助小明啊!让小明来帮小红做作业。虽然小明数学好,但是小红求助小明的话小明会愿意帮小红吗?要是小明不愿意帮小红而且还鄙视小红,小红得多尴尬啊。

class XiaoMing {    
    private int add(int a, int b) { 
        // 小明很聪明,知道怎么算,但是这个方法是私有的,不告诉其他人是怎么算的
        return a + b;    
    }
}

class XiaoHong {        
    private int add(int a, int b) {        
        // 小红就比较笨啦,看到问题脑子一片浆糊。。不知道怎么算       
        return ??;        
    }

    public int write() {
    //    都不会算啊,怎写得出答案嘛
        return ??;
    }
}

这是已经深夜 22:00 了,小红终于拉下了脸面,通过 QQ 向小明发起了求职。没想到小明倒是懂得怜香惜玉,还赶紧安慰小红说“我愿意帮你”。因为时间紧迫,小明已经没有时间教小红怎么做了,他对小红说道:“我给你一个接口,你告诉我题目,我直接返回给你答案”。说完,小明赶紧定义了一个接口。

interface Helper {
    public int output(int a, b);
}

小明定义好了接口,那么接口中的方法谁来实现呢?当然是小明啊,是时候表演真正的技术了。

class XiaoMing implements Helper{            
    private int add(int a, int b) {            
        // 小明很聪明,知道怎么算,但是这个方式是私有的,不告诉其他人是怎么算的                return a + b;     
    }
    @Override

    public int output(int a, int b) {
        // 小明在接口中调用自己的计算方法,然后返回计算结果
        return add(a, b);
    }
}

小明实现了这个接口,赶紧告诉小红,并教小红如何使用。

class XiaoHong {           
    // 小红为了使用小明的接口,定义了一个接口变量
    private Helper helper;
    // 并且通过传入的 helper 实例化
    public void setHelper(Helper helper) {
        this.helper = helper;
    }
    private int add(int a, int b) {               
        // 小红有了 helper, 告诉 helper a 和 b 的值,让 helper 返回结果               
return 
helper.output(a, b);     
    }
}

所以,小红要做的事就是把 helper 设置成小明,从而通过小明给出答案

public class Test1 {

    public static void main(String[] args) {
        XiaoMing xiaoMing = new XiaoMing();
        XiaoHong xiaoHong = new XiaoHong();
        xiaoHong.setHelper(xiaoMing);
        int result = xiaoHong.add(1, 2);
        System.out.println(result);
    }
}
输出结果:3

小红并没有计算的能力,但是却可以给出运算结果,这就是接口的作用。所以,接口可以用在这个情况:
1、功能模块 B 想要使用功能模块 A 的功能,那么 A 可以给出一个接口,让 B 来调用。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容