基本介绍
接口给出一些没有实现的方法,封装到一起,到某个类使用时再根据具体情况把这些方法写出来。
注意:在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{
@override
public void connect(){
System.out.println("连接mysql");
}
public void close(){
System.out.println("关闭mysql");
}
}
//B程序员连接Oracle
public class Oracle implements DBInterface{
@override
public 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、接口在一定程度上实现代码解耦