有了继承,为什么要定义接口

我是个初学者,刚开始的时候,学习java有这样的一种困惑,就是接口是用来干什么的,为什么有了继承,还要定义接口进行继承,不是多此一举吗。

后来看了一些资料,懂了一些

现具体功能时,接口和实现的类分离。接口定义为XxxService,实现为XxxServiceImpl。

接口提供了一个公用的方法提供方。 接口是用来规定子类的行为的。

面向接口编程的好处:

1.根据客户提出的需求提出来,作为接口的;业务具体实现是通过实现接口类来完成的。

2.当客户提出新的需求时,只需编写该需求业务逻辑新的实现类。

3.假如采用了这种模式,业务逻辑更加清晰,增强代码可读性,扩展性,可维护性。

4.接口和实现分离,适合团队协作开发。

5.实现松散耦合的系统,便于以后升级,扩展。

耦合

个人觉得就是因为耦合的缘故,所以延伸出接口这一个概念。

接下来引用一个博主的典型示例https://blog.csdn.net/qq_24886697/article/details/78580509

通俗的讲,就是为了降低耦合度。 

一个很搞笑的例子: 
看看下面的程序: 一个学校里边,有两种人:学生、老师。他们都要吃饭和睡觉。 
------------------------------ 
public interface 人{ 
    void 吃饭();
    void 睡觉(); } 

public class 学生 implements 人{ 
    public void 吃饭(){ 
        //去食堂吃饭 } 

    public void 睡觉(){ 
        //回寝室睡觉 } 
    //其他特有方法,比如泡妞、打游戏 } 

public class 老师 implements 人{ 
    public void 吃饭(){ 
        //回家吃饭 } 

    public void 睡觉(){ 
        //回家睡觉 } 

    //其它特有方法,比如为生儿育女传宗接代的历史使命努力等不足为外人道的事情 } 

public class 学校{ 
    public void 开饭(人 ren){ 
    ren.吃饭(); } 

    public void 放学(人 ren){ 
    ren.睡觉(); } } 

----------------------------- 
这里就用到了里氏代换原则,"开饭()"和"放学()"的参数都是人,那么这个地方如果换成学生和老师肯定也可以。 
   人 a = new 学生(); 
     学校.开饭(a); 学校.放学(a); 
这样执行的结果就是学生回寝室吃饭。 

  人 b = new 老师(); 
    学校.开饭(b); 学校.放学(b); 
这样执行的结果就是老师回家吃饭。 

为什么要这样写呢?这样写有什么好处呢? 我在开饭的时候完全可以直接调用"学生.吃饭();"、"老师.吃饭();"啊。 接着看。 有一天,学校里来了第三种人,家长。 家长既不是去寝室睡觉也不是回家睡觉,而是旅馆睡觉,既不是去食堂吃饭也不是回家吃饭,而是去下馆子。 这个时候学校这个系统该怎么处理呢? 如果原来没有定义"人"这个接口那就麻烦啦,所有用到人的地方代码都要改。 现在不一样了,我可以直接定义一个类:家长,这个类实现人这个接口就可以了。 

好,看代码: 
------------------------------ 
public class 家长 implements 人{ 
    public void 吃饭(){ 
        //下馆子 } 

    public void 睡觉(){ 
        //去旅馆睡觉 } 

    //其它特有方法,比如会见老师,晓之以钱,动之以利等等,不一而足 } 
------------------------------- 

在调用的时候不需要修改任何代码,还和原来一样: 
    人 c=new 家长(); 
       学校.开饭(c); 
       学校.放学(c); 
轻松搞定家长的食宿问题! 

这样一来学校来再多的客人都没关系啊,绝对可以应付自如,这也就是传说中的可扩展性! 不知道初学者看到这里是不是能够明白接口的作用。如果你还不明白,那么你把人这个接口去掉,自己写一个学校开饭和放学的类,然后再加一个家长这个新新人类进去,看看你的代码是什么样子的,再想一下在人口这么多的中国,万一哪天你的学校里来了成千上万个新新人类你该怎么办! 先声明一下,这个案例可不是我想出来的~~ 然后我们就很好理解了,为什么用别人的东西要实现接口呢?很直接的一个原因是这样一来,编程的复杂度就可能会大大降低了。

猜你喜欢

转载自blog.csdn.net/gaoweiyuan1996/article/details/81214615