1. 继承
要谈接口,首先要了解java中继承的原理。继承在java中用关键字extends来实现。
比如说有类People,有两个类需要去继承People类,那么就要这么定义
class People{
…
public Sring name;
public void getBaby(){
//生孩子
…
}
public void getPeriod(){
//来大姨妈
…
}
public void eat(){
//吃饭
…
}
}
class Male extends People{
…
}
class Female extends People{
…
}
其中Male类和Female类都继承了People类,那么这两个类都具有了People可继承的成员变量和方法。例如可继承方法eat(),即作为人类中的一份子,不管是男性还是女性都要吃饭。但是,有一些方法,某些子类却不需要去继承。例如Male类就不需要去继承getPeriod()和getBaby()方法,一个正常的男性是不会有这两个功能的。他反而会需求另外的功能,比如说,getMyWife()。即一个男性会希望有一个他的妻子。但是我们又不能无中生有,在Male类中实现这个方法,那怎么办呢?,这是我们就需要一个媒人来帮我们介绍了。即接口的作用。
2.接口的用处
从以上可知,当子类继承的父类中满足不了子类的需求时就要用到接口。接着Male类讲,此时有一个类Marriage,可以满足Male类的需求。如下:
class Marriage{
getMyWife(){
…
}
}
若想获得个getMywife()这个方法,此时我们就需要继承Marriage这个类了。那么对于一个c++大佬兼java小白来说怎么定义Male类呢?他/她会这么定义:
public class Male extends People,Marriage{
…
}
首先我负责任的告诉你,如果你真这么做了,我建议你重新学一遍java基础。因为java并不支持多继承。由此我们引申出关键字interface,即接口。
这里要想使用的话,需要先定义接口Marriage,然后再使用关键字implements来继承接口。如下:
interface Marriage{
public getMyWife();
//接口中方法都为抽象方法不用实现具体方法,声明即可
}
public class Male extends People implements Marriage{
…
}
这样就能满足Male类的需求了。
当然这只是对于男性来说的,人的需求是很多的,因此我们可能需要在接口中定义多个方法,当然也可以定义多个接口都使用。毕竟java是支持多接口的。
如:
class Female extends People implements Clothes,MkeUp{
…
}
。
总结
在java中接口出现的原因就是补充java中无法多继承的不足。同时接口却可以同时使用多个。java的这一矛盾的设计理念很好的表现了java的三大特性,即封装、继承、多态。具体的过程就要涉及到了设计模式这一理念。大家有兴趣的可以去看看。