接口的定义与使用
接口优先原则:在一个操作既可以使用抽象类,又可以使用接口的时候,优先考虑使用接口。
1.接口定义:
在java中,接口就是一个抽象方法与全局常量的聚合(JDK1.8以前),接口使用interface关键字定义。
(1)接口的命名规范:接口前加大写 I 来区分接口
(2)子类实现接口使用implements关键字,并且子类可以同时实现多个父接口(可以使用接口来实现多继承)。
一般用 接口名+Impl 来命名子类(一般使用主接口名,如果都差不多就找一个有特点的子类名字)。
(3)父接口之间可以互相转换,父类和父接口之间也可以互相转换(前提是有共同的子类)。
2.接口的使用原则
(1)接口中只有public权限(不管是属性还是方法,其权限均为public)。如果不写,默认为public。
接口中 public、static、final、abstract 均可以省略。
阿里编码规约:接口中方法和属性不要加任何修饰符,public 也不要加,保证代码简洁性。
(2)当一个子类既需要实现接口,又需要继承抽象类时,先使用extends继承一个抽象类,而后使用implements实现多个接口。
(3)抽象类可以使用implements关键字实现接口,但是接口不能extends抽象类。
父类已经实现的接口,子类也可以使用implements接口,只是起强调作用,表明是该接口的直接子类。
(4)接口可以使用extends继承多个父接口。
3.接口的应用
(1)定义操作标准(USB2.0标准)
(2)表示一种能力,或者进行一项操作
(3)在分布式开发中暴露远程服务方法
//接口定义标准
//例:模拟实现电脑的USB接口,可以使用鼠标和键盘
interface IUSB{
void plugIn();
void setup();
void work();
}
class Mouse implements IUSB{
public void plugIn(){
System.out.println("鼠标插入接口");
}
public void setup(){
System.out.println("安装鼠标驱动");
}
public void work(){
System.out.println("鼠标正常工作");
}
}
class Keyboard implements IUSB{
public void plugIn(){
System.out.println("键盘插入接口");
}
public void setup(){
System.out.println("安装键盘驱动");
}
public void work(){
System.out.println("键盘正常工作");
}
}
class Computer{
public void play(IUSB usb){
usb.plugIn();
usb.setup();
usb.work();
}
}
public class Test5{
public static void main(String[] args){
Computer computer = new Computer();
computer.play(new Mouse());
computer.play(new Keyboard());
}
}
4.接口定义增强
JDK1.8之后接口允许出现以下两类方法(有方法体):
(1)使用default定义的普通方法,需要通过接口对象来调用
(2)使用static定义的静态方法,直接使用接口名调用