对于Java初学者来说,可能会有这样一个疑惑----我们定义了一个接口,但是我们在实现这个接口的类中,还要实现接口中的所有方法,那还不如直接就在这个类中写实现方法,岂不更便捷,还省去定义接口麻烦?那么接口在Java中的作用到底是什么呢?
1、定义
接口是由一组相关的空方法构成的。
2、作用
接口是个规范。因为它可能要被多个类去实现,程序怎么知道他们是有关联的呢?既然不是一个类去实现,那么是有很多地方有用到,大家需要统一标准。甚至有的编程语言(Object-)已经不把接口叫interface,直接叫protocol。
统一标准的目的,是大家都知道这个是做什么的,但不需要知道具体怎么做。比如,Comparable找个接口是用来比较两个对象的,那么如何比较呢?
数字有数字的比较方法,字符串有字符串的比较方法,学生(自己定义的类)也有自己的比较方法。
软件开发中一个很重要的一个理念就是“解耦”,接口和接口实现就是在干这件事,定好规范,任你实现,效率可高,可低,实现内容也可随时间变化而变化,但是调用关系是不变的。
3、优点:
(1)程序是可拓展的。你在修改你具体的实现类的时候,不需要去修改调用它的类;这个呢,是java编程时候强调的“对拓展开放,对修改关闭”原则。当然这也是java多态性的体现。
(2)就是java通过Interface实现多继承。继承的一个好处就是代码的复用,减少代码错误。
4、生活实例
(1)假如我开了一个宠物粮店,声明所有宠物都可以来我这里买粮食,这就相当于一个接口。
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(PetRestautrant pet){
pet.buy();
}
}
好了,这个时候我这个老板出现了,我可以给他们卖粮食了,相当于测试类
public class Tests{
public static void main(String[] args){
test t=new test();
PetRestaurant dog=new DogPet();
PetRestaurant cat=new CatPet();
t.buy(dog);
t.buy(cat);
}
}