zoukankan      html  css  js  c++  java
  • 关于接口的理解

    这篇文章是我在学习接口时,从一位前辈给别人提问的回答中看到的,感觉讲的非常好,这里分享给大家:

    接口的作用对于很多新手来说很不容易理解,我给大家举个例子。
    接口只是一个规范,所以里面的方法都是空的。
    假如我开了一个宠物粮店,声明所有宠物都可以来我这里买粮食,这就相当于一个接口,
    //专门给宠物的接口
    public interface PetRestaurant {
        public void buy();
    }
    当一只狗看到了,知道自己是宠物,所以它去实现这个接口
    //宠物实现接口
    public class DogPet implements PetRestaurant {
        public void buy() {
            System.out.println("我是狗,我要买狗粮");
        }
    }
    当一只猫看到了,知道自己也是宠物,所以也去实现这个接口
    public class CatPet implements PetRestaurant {
        public void buy() {
            System.out.println("我是猫,我要买猫粮");
        }
    }
    当狗和猫来我的店之前,我是不知道他们到底是什么,但是当他们来到我的店,我就知道一个要猫粮食,一个要狗粮食。
    因为他们都实现了我这个接口,都可以买。
    下面这个类相当于一个接待顾客的类,即店小二,他接待所有实现了我这个宠物店接口的动物,
    传进来一个PetRestaurant类型,注意,这个PetRestaurant 是接口:
    public class test {
        //把接口传进来,声明一个pet,让店小二理解接待宠物顾客的功能
        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
    你想,假如没有接口,会怎么办,来一个猫,我要去创造一个猫,还要实例化,来一只狗,我要创建一只狗,同样要实

    例化,还要配备专门的店小二去接待,就会相当麻烦

  • 相关阅读:
    【转】Windows2012设置文件夹权限报错:failed to enumerate objects in the container.
    Vue 中背景图片路径怎么加参数?
    C#有小数位数直接进位为整数;JavaScript Math有小数位数取整方法
    C# Linq to Entity使用Groupby查询时超时或很慢解决思路
    colModel的设置(给单元格指定颜色等)
    金额的表示方法
    jqGrid表格时间格式化 ,formatoptions: {srcformat:'Y-m-d H:i:s',newformat:'Y-m-d H:i:s H:i:s'}
    HTTP Error 414. The request URL is too long. asp.net解决方案
    radio/checkbox各种操作
    Kubernetes常用命令总结
  • 原文地址:https://www.cnblogs.com/jackchiang/p/4516160.html
Copyright © 2011-2022 走看看