1、定义
- 接口的定义:就是抽象方法和常量值的集合。从本质上讲,接口就是一种特殊的抽象类。
- 接口的格式:
[public] interface interfacename [extends SuperInterfaceList]{//可继承多个接口
[public static final] int i = 20;
[public abstract] void f();
...... //常量定义和方法定义
}
- 接口中定义的属性【必须】是public static final
方法必须是public abstract,可省略 - 接口可继承接口
2、实现
类可以实现接口,并可重写方法,重写必须加public
interface It{
int i = 20;
void f();
}
abstract class A implements It{ //把接口中的成员包含到类A中
public void f(){//重写必须加public
System.out.printf("i = %d\n",i);
}
}
继承放前面,实现接口放后面,例如:
class T extends A implements It4,It3{
}
3、初始值问题
class A{
int i;
public void show(){
System.out.printf("show-> %d\n",i); //i是属性i,此时的i等价于this.i
}
public void f(){
int i; //这里的i和属性i没有冲突
System.out.printf("f-> %d\n",i); //error 因为i是局部变量,使用时必须初始化
}
public void g(int i){ //i是形参i,形参i也是局部变量
this .i = i;
System.out.printf("g-> %d\n",i);
}
}
4、多态
interface It{
void f();
}
class A implements It{
public void f(){
System.out.printf("AAAA\n");
}
}
class D{
public static void main(String[] args) {
It it;
it = new A();
it.f();//输出:AAAA
it.g();//error
}
}
- 把一个接口(抽象的),可以定义一个实现该接口的对象(
new A()
),把对象的地址发送给接口的引用,通过接口的引用可以调用这个接口指向的那个真正的对象(A
)中的那些成员。 - 通过接口的引用只能调用子类(
A
)从父类(It
)继承过来的成员(f()
),不能调用子类所特有的(g()
)。
5、接口的作用
- 通过接口可以实现不相关类的相同行为
如:Java规定所有可以完成自我复制功能的类都必须实现java.lang.Colneable
接口,但该接口却是空的,没有任何内容,目的只是为了起个标志作用。 - 接口提供了不同对象进行协作的平台
如事件处理 - 接口可以实现多继承,从一定程度上弥补了类只能单继承的缺陷。
- 接口使我们了解一个类的功能的重要途径。
如:Java整个容器框架就是以接口的方式建立起来的,实现不同接口的类完成的是不同的功能,接口是我们了解一个类功能的重要途径。