JAVA语言中接口的使用

接口的概念

abstract关键字允许人们在类中创建一个或多个没有任何定义的方法,该方法只提供接口部分,但是没有提供任何相应的具体实现,这些实现由此类的继承者创建。而Java中有接口的概念,通过接口产生一个完全抽象的类,它根本就没有提供任何具体的实现。它允许创建者确定方法名、参数列表和返回类型,但是没有任何方法体。总之,接口只提供了形式,而未提供任何具体实现。

要想创建一个接口,需要用interface关键字来替代class关键字。接口的概念中有如下几个要点:

(1)接口中每一个方法也是隐式抽象的,接口中的方法会被隐式地指定为public abstract(只能是public abstract,其他修饰符都会报错)。

(2)接口中可以含有变量,但是接口中的变量会被隐式的指定为public static final变量(并且只能是public,用private修饰会报编译错误)。

(3)接口中的方法是不能在接口中实现的,只能由实现接口的类来实现接口中的方法。(哎呀,JDK8之后,接口中有default关键字修饰的方法是有方法体的哦)。

接口的定义和使用举例

1
2
3
4
5
//在Animal.java文件中定义Animal接口
interface Animal {
public void eat();
public void travel();
}

备注:接口还可以继承其他接口,如public interface Animal extends Biology {},要注意的是这里是extends,而不是implements.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//在MammalInt.java文件中定义MammalInt类,实现Animal接口
public class MammalInt implements Animal {
public void eat() {
System.out.println("Mammal eats");
}
public void travel() {
System.out.println("Mammal travels");
}
public int noOfLegs() {
return 0;
}
public static void main(String args[]) {
MammalInt m = new MammalInt();
m.eat();
m.travel();
}
}

需要注意的是,一个类可以实现implements多个接口,如public class WaHaHa implements InterfaceA, InterfaceB {}

接口的继承

关于接口的继承的两点。一是接口可以继承其他接口,和类的继承是一样的。二是接口可以多继承,即一个接口可以继承多个父接口(类的继承只能是单继承)。

1
2
3
4
5
6
7
8
9
10
public interface Sports {
public void setHomeTeam(String name);
public void setVisitingTeam(String name);
}

public interface Football extends Sports {
public void homeTeamScored(int points);
public void visitingTeamScored(int points);
public void endOfQuarter(int quarter);
}

在接口的多继承中extends关键字只需要使用一次,在其后跟着继承接口。

1
2
public interface Hockey extends Sports, Event {
}

抽象类与接口的区别

(1)抽象类中的方法可以有方法体,就是能实现方法的具体功能,但是接口中的方法不行

(2)抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的

(3)接口中不能含有静态代码块以及静态方法(用static修饰的方法),而抽象类是可以有静态代码块和静态方法

(4)一个类只能继承一个抽象类,而一个类却可以实现多个接口