接口是抽象类的一种变体,但它与抽象类又有一些差异。首先接口是用关键字interface来定义的,形式为
:[修饰符]interface接口名
{
//变量和方法声明
}
接口中所有的方法都是抽象的,(abstract可以省略不写),也没有方法体,看起来与抽象类非常相似,但它们仍然有显著的区别。
(1)抽象类中的方法不一定都是抽象的,而接口中所有的方法都是抽象的
(2)接口中的所有数据都是公有静态常量,即具有public ,static,final属性,但一般又不写这些修饰符。
(3)因此接口中的所有方法都是抽象的,public的,因此必须在实现该接口的子类中重写所有的这些方法。
样例
interface Myinter
{
double g=9.9;
void show();
}
由接口生成子类不是通过extends实现的,而是用关键字implements来实现一个接口,方式为:
class 类名 implements 接口名 [extends类名]
{
类体
}
其中被实现的接口可以有多个,之间用逗号分隔,这一点是类在继承时无法做到的,Java只支持单继承,如果想达到多继承的效果,可以通过实现多个接口的方式来实现。例如根据上面定义的接口Myinter,可以定义类Test:
class Test implements Myinter
{
public void show()
{
System.out.println(“g=”+g);
}
}
与类之间的继承关系相似,接口之间也可以通过关键字extends进行继承,但其中抽象的方法不能被具体实现。
interface A{
int a=1;
void showa();
}
interface B extends A{
int b=2;
void showb();
}
interface C extends A,B{
int c=3;
void showc();
}
class D implements C{
public void showa(){
System.out.println("aaaa");
}
public void showb()
{
System.out.println("bbbb");
}
public void showc()
{
System.out.println("cccc");
}
}