接口是抽象类的延伸,可以将它看作是存粹的抽象类,接口中的所有方法都没有方法体。接口使用interface关键字进行定义,其语法如下:
public interface drawTest{
void draw();//接口内的方法,省略abstract关键字
}
public :接口可以像类一样被权限修饰符修饰,但public关键字仅限用于接口在与其同名的文件中被定义。
interface:定义接口关键字。
drawTest:接口名称。
一个类实现一个接口可以使用implements关键字,代码如下:
public class Parallelogram extends Quadrangle implements drawTest{
……//
}
在接口中定义的任何字段都自动时static 和 final的。
public interface Runner{
int id = 1; //等价于public static final int id = 1;
public void start(); // 等价于public abstract void start();
public void run();
public void stop();
}
接口具有以下特征:
1)、接口中的常量默认为public static final ,并且也只能是public static final;
2)、接口中只能定义抽象方法,而且这些方法默认为public abstract,并且也只能是public abstract 类型;
3)、接口可以继承其他接口,并添加新的属性和抽象方法;
4)、在接口中声明方法时,不能使用native、 static 、final、synchronized、private、protected等修饰符;
5)、Java中不允许类的多继承,但允许接口的多继承;
6)、不允许创建接口的实例,但允许定义接口类型的引用变量,该变量引用实现了该接口的类的实例;
7)、一个类只能继承另一个类,但能同时实现多个接口,并且重写的方法必须显式声明为public。
package javademo;
interface A {//接口
void a_f();
}
interface B{
void b_f();
}
interface C extends A,B{//接口多继承
void c_f();
}
class D {
void d_f(){
System.out.println("d_f()");
}
}
class H implements A{
public void a_f(){//必须显式声明为public
System.out.println("a_f()");
}
void h_f(){
System.out.println("h_f()");
}
}
class E extends D implements A,B{//实现多个接口
public void a_f(){//必须显式声明为public
System.out.println("a_f()");
}
public void b_f(){
System.out.println("b_f()");
}
}
public class TestInterface {
public static void main(String[] args) {
// TODO Auto-generated method stub
E e = new E();
e.d_f();
e.a_f();
e.b_f();
A a = new H();//接口的引用变量指向实现接口的类的实例
a.a_f();
}
}