语法格式:
public interface 接口名 {
接口成员
}
- 和抽象类不同,定义接口使用interface修饰符,访问修饰符只能是public
- 接口成员可以是全局常量和公共的抽象方法
子类通过implements关键字实现接口,语法如下:
public 类名 implements接口名 {
实现方法
普通方法
}
改正我的错误印象示例
public interface UsbInterface {
void service();
}
public class UsbFan implements UsbInterface{
public void service() {
System.out.println("1");
}
}
public class UDisk implements UsbInterface {
public void service() {
System.out.println(2);
}
}
public class Test {
public static void main(String[] args) {
UsbInterface usb;
usb = new UDisk();
usb.service();
usb = new UsbFan();
usb.service();
}
}
在这个例子中,UsbFan和UDisk都继承了UsbInterface接口。在main方法中,是把UsbInterface当成了一个抽象类来用,采用多态,使用下面的语法格式:UsbInterface usb = new UDisk();这个地方的接口用法跟抽象类似的。
接口使用注意
1、接口之间通过extends实现继承关系,一个接口可以继承多个接口,但是不能继承类。继承接口的格式如下
[修饰符] interface 接口名 extends 父接口1,,父接口2...{
常量定义
方法定义
}
2、一个普通类只能继承一个父类,但能同时实现多个接口。一个类必须实现接口的全部方法,否则必须定义为抽象类。若一个类在继承父类的同时又实现了多个接口,extends必须位于implements之前。
class 类名 extends 父类名 implements 接口1,接口2....{
类的成员
}
3、接口和类、抽象类是一个层次的概念,命名规则相同
4、接口中可以定义常量,不能定义变量。接口中的属性都默认用“public static final”修饰,即接口中的属性都是全局静态常量。接口中的常量必须在定义时指定初始值。
//在接口中,下面这两个定义语句的效果完全相同
public static final int PI = 3.14;
int PI = 3.14;
5、接口中的所有方法都是抽象方法,接口中的方法都默认为public abstract
6、和抽象类一样,接口同样不能实例化,接口中不能有构造方法
7、但是接口和抽象类一样,也可以作为数据类型使用。
8、接口的实现类必须实现接口的所有方法。
面向接口编程
程序设计时:关心实现类有何能力,而不关心实现细节
面向接口的约定而不考虑接口的具体实现