_________________________________________________________________________________
假设你去公司面试,一般都会对学历有要求,比如大学本科、硕士研究生等。
招聘接口:“对学历有要求”,好比是接口,这是一个宽泛的标准!这就好比是程序的接口。
因为公司招聘是有规章制度的,因此需要有这么一个进人的规范。
对“学历要求”具体不同的内容,这就是接口的实现。
比如HR要求人力资源或行政相关专业,
Java开发工程师可能要求计算机相关专业。
高级行政管理人员可能要求MBA学历等等。
简单来说,就是不同部门、不同岗位对学历的定义(或者说具体实现)是不同的。
这样一来会有以下几个问题产生:
1、如果人力部门招这个专业很可能和自己部门的业务不对口,
此时如果因此而修改学历要求可能暂时可以满足人力的要求,但是业务部门却又该出麻烦了。
2、同一部门的不同职位对于专业学历高低要求不同。
比如部门经理要求是研究生、普通员工要求是本科生,如果你直接写死,
那么水平高的人招不进来对公司不就是损失吗?
定好规范,任你实现,效率可高、可低,实现内容也可随时间变化而变化,但是调用关系是不变的
(也就是说公司在选拔人才时,无论如何学历还是必须的一环,这一点是不会变的)
_________________________________________________________________________________
接口只是一个规范,所以里面的方法都是空的。
假如我开了一个宠物粮店,声明所有宠物都可以来我这里买粮食,这就相当于一个接口,
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();//实例化一个猫,相当于把猫顾客实例化
t.buy(cat); //把猫交给店小二
t.buy(dog); //把狗交给店小二
}
这样运行的结果就是
我是猫,我要买猫粮
我是狗,我要买狗娘
你想,假如没有接口,会怎么办,来一个猫,我要去创造一个猫,还要实例化,来一只狗,我要创建一只狗,同样要实例化,还要配备专门的店小二去接待,就会相当麻烦
_________________________________________________________________________________
_________________________________________________________________________________
大家说的都很对,我再补充一点。
接口在开发过程中可以快速分离工作内容。
比如调用者在写业务逻辑的时候需要一个功能,可能是数据库访问,或者复杂计算,但是他的工作专注于实现业务逻辑,不想分开精力去做底层实现,那么他只需要先实现一个接口,定义了规范,然后就可以继续他的业务逻辑代码了。
而实现者可以根据这个接口规范,做具体的实现。
这样通过使用接口就可以快速的分离工作内容,达到团队并行工作的目的。