一、接口:一种规范,一种标准,接口本身不提供具体实现,通过接口的实现类来提供具体的功能。
二、接口的定义:
1、关键字:interface
2、实现接口的关键字: implements
3、在接口中定义的方法,是抽象方法,不能具体实现
4、编译器会自动在方法的前面加入public abstract
5、一个类实现了接口,必须重写接口中的抽象方法。
6、接口可以继承多个接口,一个类可以实现多个接口
三、接口中可以定义的内容:
1、抽象方法,public abstract
2、静态常量,public static final
四、注意事项:
1、接口不能被实例化。
2、接口不能定义private的内容
如:
public class Test {
public static void main(String[] args) {
USB usb=new KeyBoard();
usb.work();
System.out.println("USB接口的宽度:"+USB.WIDTH+"cm");
}
}
//USB接口
public interface USB {
public abstract void work();
public static final double WIDTH=1.8;
}
//键盘
public class KeyBoard implements USB{
public void work() {
System.out.println("键盘输入文字");
}
}
五、接口和抽象类的区别:
1、构造方法:接口没有构造方法;而抽象类可以有构造方法,用于子类实例化使用;
2、成员变量:接口只能是常量。默认修饰符:public static final;而抽象类可以是变量,也可以是常量;
3、成员方法:jdk1.8中接口可以写以default和static开头的具体方法;而抽象类中的方法可以是抽象方法,也可以是非抽象方法;
六、JDK1.8中接口的新规则:
1、在接口可以定义一个默认的有方法体的方法。
如:public interface USB {
public default void print() {
System.out.println("Hello World");
}
}
2、lambda表达式:简化代码,主要解决的是接口和实现类,一个接口可能有好多实现类,一个一个的定义实现类太麻烦,可以使用lambda简化代码
lambda表达式:
USB usb=()->System.out.println("提供凉风");
usb.work();
相当于:
USB usb=new USB() {
public void work() {
System.out.println("提供凉风");
}
};
usb.work();
实例如:
public class Test {
public static void main(String[] args) {
People p1=(langage)->System.out.println("中国人说"+langage);
p1.say("汉语");
}
}
//People.java文件(接口)
public interface People {
void say(String laugage);
}
//输出结果:
中国人说汉语