一、基本概念
Java中的接口在语法上有些类似于抽象类,不同的是接口只有被static final修饰的属性,如果不写就默认为static final的。其次,接口的方法都是抽象的,且没有方法体,当然,接口不写默认也是抽象的。接口的主要作用就是用来帮助实现类的多继承。
接口使抽象的概念更深了一层,可以将接口想象为一个纯抽象类。接口和抽象类有一点一样就是他们只提供一种形式,不提供实施的细节。方法的实现由实现了这一接口的不同的类来完成。
二、接口的声明语法
使用关键字interface声明接口:
【接口修饰符】 interface 接口名称 【<Type{,Type}>】 【extends 父类名】{
//方法的原型声明或静态常量
}
例如:
interface Shape2D{
static final double pi=3.13;
public abstract double area();
}
接口在声明时可以是泛型接口。
三、接口的实现
接口的实现语法:采用关键字implements(实现)
【类修饰符】 class 类名 implements 接口名称{
}
实现接口的类必须实现接口中所有的抽象方法,注意在实现一个接口的时候,来自接口的方法必须声明为public的。
例如:
class Circle implements Shape2D{
double radius;
public Circle(double radius){
this.r=r;
}
public double area(){
return (piradiusradius);
}
}
public class InterfaceTester{
public static void main(String args[]){
Circle c = new Circle(2);
System.out.println(“area=”+c.area());
}
}
四、接口多实现
Java没有多继承,但是可以通过接口多实现来实现多继承。语法如下:
【类修饰符】 class 类名称 implements 接口1,接口2,接口3…{
}
需要注意的是,如果实现接口的类不是抽象类,那么就需要实现所有接口的抽象方法。
比如在上面的例子中,我们加入的设置颜色的接口
interface Color{
void setColor(String str);
}
class Color implements Shape2D,Color{
String Color;
double radius;
//为了方便,多余的就不写了
public void setColor(String Color){
this.Color=Color;
System.out.println(“颜色是:”+Color);
}
}
主方法中写
Circle c = new Circle();
c.setColor(“blue”);
五、接口的扩展(继承)
接口其实也是一个类,也可以通过扩展(extends)来派生出新的接口,原来接口称为基本接口父接口,派生出来的称为派生接口或者子接口。派生的接口不仅可以保有父接口的成员,同时也可以加入新的成员,这点和继承一样的。
接口的继承也相当于在一步一步具体化。
语法:
interface 子接口的名称 extends 父接口的名称1,父接口的名称2…{
…
}
例如:
在上面的例子上改动,
interface Shape{
double pi=3.14;
void setColor(String color);
}
interface Shape2D extends Shape{
添加自己的方法,double area();默认为抽象的,方法不用写的非常具体。
}
class Circle implements Shape2D{
double radius;
String color;
public Circle(double radius){
this,radius=radius;
}
public double area(){
return (piradiusradius);
}
public void setColor(String color){
this.color=color;
System.out.println(“颜色:”+color);
}
}
主方法:Circle c = new circle(2.0);
c.setColor();
Syostem.out.println("面积是:"c.area());
需要注意的是,子接口中如果和父接口中定义了同名的变量,就会出现The field pi is ambiguous这个错误这个错误是错变量混淆不清,不知道用的是哪个变量,所以接口继承中可能没有隐藏这种说法,用super好像也没用。方法的覆盖仿佛也有问题。