接口就是给出一次额没有实现的方法,封装到一起,到某个类要使用的时候,根据具体的情况把这些方法写出来。
语法:interface 接口名{
属性+方法
}
class 类名 implements 接口{
自己的属性//方法
}
注意:在jdk7以前都没有接口中的方法都没有方法体,而在8.0之后可以有静态方法,默认方法(需要用default进行标记),也就是说接口中有方法的具体实现,在接口中抽象方法可以进行省略。
public interface InterfaxeTest { public int a=10; public int sum(); default public void hi(){ System.out.println("你好"); } public static void ok(){ System.out.println("OK"); }}
接口的简单用法规范我们的书写,方便调用。比如,我们现需要写出三个类,分别链接mysql数据库,oracle数据库。我们程序员1写的链接mysql数据库链接方法定义为f1,断开为f2。而程序员2写的链接oracle数据库的方法为connect,与close方法。这样会导致我们使用不同的数据库时,调用函数的麻烦,但是当我我们使用接口,就可以规范每一个的命名,举个简单例子:
public interface DBInterface { public void connect(); public void stop();}
public class Oracle implements DBInterface{ @Override public void connect() { System.out.println("链接oracle数据库"); } @Override public void stop() { System.out.println("断开链接oracle数据库"); }}
public class MySql implements DBInterface{ @Override public void connect() { System.out.println("链接mysql数据库"); } @Override public void stop() { System.out.println("断开链接mysql数据库"); }}
public class Test { public static void main(String[] args) { MySql mySql = new MySql(); mySql.connect(); mySql.stop(); }}
接口的注意事项接口本身并不能被实例化接口中所有方法都为public方法,接口中的抽象方法,可以不用abstract修饰一个类继承该接口,就必须实现接口的所有方法一个类可以实现多个接口
public class Oracle implements DBInterface,InterfaxeTest{ @Override public void connect() { System.out.println("链接oracle数据库"); } @Override public void stop() { System.out.println("断开链接oracle数据库"); } @Override public int sum() { return 0; } @Override public void hi() { InterfaxeTest.super.hi(); }}
接口中的属性只能是final,而且是public static final修饰符,比如int a=1;实际上为public static int a=1;
证明:
我们在刚才的接口中定义int a=0;
在main方法中输出如下;如果不报错并且可以正常输出,说明这个为public并且为static,我们并没有创建实例化对象。而final只需要我们尝试改变以下值即可。
public class Test { public static void main(String[] args) { System.out.println(MySql.a); }}
做个练习:
public class Test { public static void main(String[] args) { System.out.println(DBInterface.a); System.out.println(MySql.a); MySql mySql=new MySql(); System.out.println(mySql.a); }}