zoukankan      html  css  js  c++  java
  • Java中的接口有什么作用

    接口的作用对于很多新手来说很不容易理解,我给大家举个例子。接口只是一个规范,所以里面的方法都是空的。假如我开了一个宠物粮店,声明所有宠物都可以来我这里买粮食,这就相当于一个接口,

    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("我是猫,我要买猫粮"); 
    	}
    }
    

    当狗和猫来我的店之前,我是不知道他们到底是什么,但是当他们来到我的店,我就知道一个要猫粮食,一个要狗粮食。因为他们都实现我这个接口,他们都有一个buy()函数,都可以进行买这个行为。下面这个类相当于一个接待顾客的类,即店小二,他接待所有实现了我这个宠物店接口的动物,传进来一个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你想,假如没有接口,会怎么办,来一个猫,我要去创造一个猫,还要实例化,来一只狗,我要创建一只狗,同样要实例化,还要配备专门的店小二去接待,就会相当麻烦。

    作者:梅云罗
    链接:https://www.zhihu.com/question/20111251/answer/14760353
    来源:知乎
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    
  • 相关阅读:
    搭建一键化编译汇编语言的环境
    Windows内核中的CPU架构8任务段TSS(task state segment)
    80866中断
    x86132位x86 处理器编程架构
    80861计算机的启动过程
    Android 10升级至Android 11后关于startActivity启动应用抛异常处理方法
    通过AndroidJUnit4框架发现用例不会按顺序执行,变成随机了
    2021年11个我们喜爱的DevOps开源工具
    2021年终总结
    CF1204C Anna, Svyatoslav and Maps
  • 原文地址:https://www.cnblogs.com/yfc0818/p/11072600.html
Copyright © 2011-2022 走看看