zoukankan      html  css  js  c++  java
  • 接口具体是什么东西

    这是一个初学者非常常见的问题。

    例如我定义了一个接口,但是我在继承这个接口的类中还要写接口的实现方法,那我不如直接就在这个类中写实现方法岂不是更便捷,还省去了定义接口?
     
    接口就是个招牌。

    比如说你今年放假出去杭州旅游,玩了一上午,你也有点饿了,突然看到前面有个店子,上面挂着KFC,然后你就知道今天中饭有着落了。

    KFC就是接口,我们看到了这个接口,就知道这个店会卖炸鸡腿(实现接口)。

    那么为神马我们要去定义一个接口涅,这个店可以直接卖炸鸡腿啊(直接写实现方法),是的,这个店可以直接卖炸鸡腿,但没有挂KFC的招牌,我们就不能直接简单粗暴的冲进去叫服务员给两个炸鸡腿了。

    要么,我们就要进去问,你这里卖不卖炸鸡腿啊,卖不卖汉堡啊,卖不卖圣代啊(这就是反射)。很显然,这样一家家的问实在是非常麻烦(反射性能很差)。要么,我们就要记住,中山路108号卖炸鸡,黄山路45号卖炸鸡(硬编码),很显然这样我们要记住的很多很多东西(代码量剧增),而且,如果有新的店卖炸鸡腿,我们也不可能知道(不利于扩展)。
     
     
     
     
    再举个例子。

    接口只是一个规范,所以里面的方法都是空的。
    假如我开了一个宠物粮店,声明所有宠物都可以来我这里买粮食,这就相当于一个接口,

    public interface PetRestaurant {
      public void buy();
    }

    当一只狗看到了,知道自己是宠物,所以它去实现这个接口
    public class DogPet implements PetRestaurant {
      @Override
        public void buy() {
          System.out.println("我是狗,我要买狗粮");
        }
    }
    当一只猫看到了,知道自己也是宠物,所以也去实现这个接口
    public class CatPet implements PetRestaurant {
      @Override
         public void buy() {
          System.out.println("我是猫,我要买猫粮");
         }
    }
    当狗和猫来我的店之前,我是不知道他们到底是什么,但是当他们来到我的店,我就知道一个要猫粮食,一个要狗粮食。因为他们都实现了 我这个接口,都可以买。下面这个类相当于一个接待顾客的类,即店小二,他接待所有实现了我这个宠物店接口的动物,传进来一个PetRestaurant 类型的宠物,注意,这个PetRestaurant 是接口
    public class test {
      public void buy(PetRestaurant pet)
        {
          pet.buy();
        }
    }

    好了,这个时候我这个老板出现了,我可以给他们卖粮食了,相当于测试类
    public class Tests {
      public static void main(String[] args) {
        PetRestaurant dog = new DogPet();      //实例化一个狗,相当于把狗顾客实例化
        PetRestaurant cat = new CatPet();      //实例化一个猫,相当于把猫顾客实例化

      test t = new test();        //实例化一个店小二
        t.buy(cat);        //把猫交给店小二
        t.buy(dog);       //把狗交给店小二
      }
    }
    这样运行的结果就是
      我是猫,我要买猫粮
      我是狗,我要买狗娘

      你知道吗,整个过程我这个店主其实根本不知道来的到底是猫是狗还是其他什么,我只要有一个店小二,把这些来的不知什么动物都全部交给店小二,店小二就知道怎么去卖了,因为这些狗啊猫啊都实现了我这个宠物店的接口,而店小二就负责接待所有实现了我这个接口的动物。这就有一个好处,假如明天来了一头小猪,只要它实现了我这个接口,我只管交给店小二处理就OK了,我这个店小二根本不需要变化,我这个店主也只需要实例化一下这个动物就OK。
      你想,假如没有接口,会怎么办,来一个猫,我要去创造一个猫,还要实例化,来一只狗,我要创建一只狗,同样要实例化,还要配备专门的店小二去接待,就会相当麻烦。
     
  • 相关阅读:
    绘制饼状图
    柱状图使用实例
    柱状图颜色区分
    bar函数与barh函数
    绘制柱状图
    绘制不同样式不同颜色的线
    Windows10没有修改hosts文件权限
    Lucene入门学习
    Kafka学习笔记
    Elasticsearch学习笔记(强推)
  • 原文地址:https://www.cnblogs.com/wgbs25673578/p/5010564.html
Copyright © 2011-2022 走看看