对于很多Java初学者而言,接口很不容易理解,实际上接口只是一个规范,里面的很多方法都是空的。接下来举个例子帮助大家形象的理解接口。
假如我开了一个宠物粮店,并声明称:所有的宠物都可以到我这里买粮食,这就相当于一个接口publicinterfacePetRestaurant{publicvoidbuy();}当一只狗看到了,知道自己是宠物,所以它去实现这个接口publicclassDogPetimplementsPetRestaurant{Overridepublicvoidbuy(){System.out.println("我是狗,我要买狗粮");}}当一只猫看到了,知道自己也是宠物,所以也去实现这个接口publicclassCatPetimplementsPetRestaurant{Overridepublicvoidbuy(){System.out.println("我是猫,我要买猫粮");}}当然,在狗和猫来店之前,我并不知道它们究竟是什么,但是,当它们走进我的店里,我就知道了,它们一个要狗粮,一个要猫粮。因为它们实现了我这个接口,所以都可以买。接下来的这个好比接待顾客的类,也就是店小二,他负责接待实现了宠物店接口要求的所有宠物,这时候传进来一个PetRestaurant类型的宠物请注意!这个PetRestaurant是接口publicclasstest{publicvoidbuy(PetRestaurantpet){pet.buy();}}好了,这个时候我这个老板出现了,我可以给它们卖粮食了,相当于测试类publicclassTests{publicstaticvoidmain(String[]args){PetRestaurantdog=newDogPet();//实例化一个狗,相当于把狗顾客实例化PetRestaurantcat=newCatPet();//实例化一个猫,相当于把猫顾客实例化testt=newtest();//实例化一个店小二t.buy(cat);//把猫交给店小二t.buy(dog);//把狗交给店小二}}这样运行的结果就是我是猫,我要买猫粮我是狗,我要买狗粮你知道吗在整个的过程中实际上我这个粮食店老板根本不知道来的到底是狗还是猫,只要我有一个店小二,把这些来的不知道什么动物都交给店小二,店小二就知道怎么卖了,因为这些阿猫阿狗都已经实现了我这个宠物店的接口,店小二就只负责去接待这些实现了接口的动物。这就有了一个好处,假如明天来了一只猴子,只要它实现了我这个接口,我就只管交给店小二去处理就OK啦!试想一下,假如没有接口该怎么办?来一只狗,我去创建一只狗,来一只猫,我再去创建一只猫,同样要实例化,还要配备专门的店小二去接待,就会相当麻烦。在Java中接口就是为所有的任务类型提供了一种规范或者说是标准,意思是只要你的任务符合这个标准,我的程序就可以处理。
(注:文章原自知乎原作者:梅云罗转载请保留出处)