接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。接口并不是类,编写接口的方式和类很相似,但是它们属于不同的概念。类描述对象的属性和方法。接口则包含类要实现的方法。下面就让我来介绍一些接口的基础知识。
- 接口的创建与结构
先来看我自写的简单例子:
public interface interface23 {
//常量
public static final int A=3;
//抽象方法
public abstract void play();
}
这里我创建了名为interface23的接口,不难看出接口的创建与类的创建非常相似,这里重点讲解接口中不同于类的结构:常量和抽象方法。
- 常量
常量,顾名思义,就是不可改变的量,在接口中定义数据时只能是常量,且只能是public static final这种类型,即使你不写上系统也会默认是这种数据类型,主要有以下两点原因:
①static(这时暂且认为是变量)解释:因为一个类可以实现多个接口,如果一个类同时实现了多个接口而每个接口中都定义了同一个变量的话就会产生在类中不知道是哪个接口中的变量了,所以必须定义成static的,每个接口拥有各自的这个变量。
②final解释:因为一个接口可以被多个类实现,如果不定义成final的话每个实现了该接口的类都去改变这个变量就会产生错误,所以必须定义成final。
另外,在定义常量时必须赋初值,否则在后续过程中不能赋值从而这个常量就没有任何意义了,常量在定义时通常使用大写来区分。
- 抽象方法
抽象方法,有点类似类中的方法,但说它抽象,原因就在于其不能写明具体的方法体,看起来什么功能也没有,因此就说它“抽象”。因此在使用接口时,不能直接创建对象,必须重新定义类继承接口,重写接口中的抽象方法。
例:class 子类 implements 接口1,接口2......{
//重写抽象方法
}
子类重写父类方法时,方法的访问权限不能小于原访问权限,在接口中,方法的默认权限是public,所以子类重写后只能是public。
抽象方法的书写与类中的方法类似,都需要返回值、函数名、参数类型及参数名。
- 接口的继承
类之间仅支持单继承,然而接口与类之间可以实现多继承。格式同上,其中implements是其关键字。
接口之间可以多继承,此时使用extends关键字。这是因为接口中的方法均为抽象方法,没有具体实现的方法体,所以在多继承的情况下,即使方法同名,也不会出现类多继承那样的矛盾。
三、接口的作用
这里再看一个稍微复杂一点的例子:
public class Door {
//108种开门的方法
public void open(){
System.out.println("打开门");
}
public void open(String key){
if(key.equals("123")){
System.out.print("打开门!!");}
else
{System.out.print("打不开");}
}
倘若我们要给门这个类写不同的一些方法去打开门(不传参、传string类参数等等),我们就需要完整清楚地写好每一个方法,这样在程序运行的过程中会占用比较大的内存,这显然不好。而在java中可以使用接口(interface),在编译时是一个空方法,等到具体使用的时候才编写具体的方法(用implements来实现并重写),这样可以减少内存占用空间,提高程序运行效率。
下面则是使用接口的例子:
public class Door {
public void uselock(Lock lc){
lc.open();
}
public void closelock(Lock lc){
lc.close("a");
}
}
public interface Lock {
void open();
void close(String a);
}
public class facelock implements Lock{
public void open(){
System.out.println("人脸开锁");
}
public void close(String a){}
}
public class pwdLock implements Lock{
public void open(){
System.out.println("密码开锁");
}
public void close(String a){}
}
public class closeinterface implements Lock{
private String a;
public closeinterface(String a){
this.a=a;
}
public void close(String a){
System.out.println("hahah"+a);
}
public void open(){}
}
public class main {
public static void main(String[] args){
Door door=new Door();
//lock lc=new lock();
pwdLock pd=new pwdLock();
facelock fc=new facelock();
closeinterface cf=new closeinterface("xx");
door.uselock(pd);
cf.close("xx");
}
}
在这个例子中,我们编写了lock这个接口,其中有close和open两个抽象方法,在open这个开门的方法中我们又可以创建密码开锁和人脸开锁两个类来实现具体的开门过程,这样写代码对新手来说较难理解,但对计算机来说恰好相反,并且逻辑更加清晰。
需要注意的是在重写时,必须每一个抽象方法都要重写,即使是空的方法体也如此,否则就会报错。
接口在实际开发过程中最大好处是,你可以按照设计,先把接口写好,然后分配大伙干活的时候,告诉a们去用写好的接口去实现他们的具体功能,而告诉b们,去写那些已经写好但是没有具体的代码的接口,这样可以提高工作效率。并且底层和应用也通过接口做了一个很明显的分层。
总结:以上就是接口的一些基本知识,本文参考了网络上他人的理解,如有不对欢迎批评指正!