基本介绍
接口给出一些没有实现的方法,封装到一起,到某个类使用时再根据具体情况把这些方法写出来。
注意:在jdk7之前,接口里所有的方法都是抽象方法。在jdk8之后接口中可以有静态方法,默认方法
interface 接口名{//属性//方法
}class 类名 implements 接口{//自己的属性//自己的方法//必须实现的接口的抽象方法
}
例子
public interface AInterface{//属性int a=10;//方法(抽象方法)void b();//jdk8之后接口中可以有默认方法default public void c(){System.out.println("hello");}//jdk8之后接口中可以有静态方法public static void d(){System.out.println("hi");}
}
深入讨论
//项目经理写的
public interface DBInterface{void connect();void close();
}
//A程序员连接mysql
public class MysqlDB implements DBInterface{@overridepublic void connect(){System.out.println("连接mysql");}public void close(){System.out.println("关闭mysql");}
}
//B程序员连接Oracle
public class Oracle implements DBInterface{@overridepublic void connect(){System.out.println("连接Oracle");}public void close(){System.out.println("关闭Oracle");}
}
//运行数据库
public class InterfaceTest {public static void main(String[] args) {MysqlDB mysqlDB = new MysqlDB();//调用方法InterfaceTest interfacetest= new InterfaceTest();interfacetest.work(mysqlDB);}public static void work(DBInterface db){db.connect();db.close();}
}
运行结果
使用细节
1、接口中所有的方法都是publoc, 默认使用public abstract修饰方法
void a();
//实际上是
public abstract void a();
2、一个普通类实现接口就必须将该接口中的所有方法都实现,可以使用alt+enter
3、抽象类实现接口,可以不用实现接口中的方法。
4、一个类可以实现多个接口
class Pig implements A,B{... ...
}
5、接口中所有的属性都是public, 默认使用public static final修饰属性,且必须初始化
int a=1;
//实际上是
public static final a=1;
6、接口不能继承类,但是可以继承多个其他接口。
interface A extends B,C{}
7、接口的修饰符只能是public和默认,这点和类的修饰符是一样的
接口VS继承
1、接口和继承解决的问题不同
继承的价值主要在于:解决代码的复用性和可维护性。
接口的价值主要在于:设计,设计好各种规范(方法),让其它类去实现这当方法。
2、接口比继承更加灵活
接口比继承更加灵活。继承是满足is - a的关系,而接口只需满足like - a的关系。
3、接口在一定程度上实现代码解耦