Java语言提供了一种接口(interface)机制。这种接口机制使Java的面向对象编程变得更加灵活。我们可以用接口来定义一个类的表现形式,但接口不能包含任何实现。在《Thinking in Java》一书中,作者对接口有这样的描述:“接口(interface)比抽象(abstract)的概念更进了一步。你可以把一个接口看成是一个纯的抽象类。”我认为作者对接口的这一解释再准确不过了。
wIj2 IAD EI.Pk>ZIm 理解并用好接口机制将帮助我们更好的掌握Java这种面向对象的编程语言。下面我们来讨论一下接口的使用规则以及相关的应用。
5O W(] y| PI \,`^)y 一、接口的定义及实现
9y*!W ;_aoM& 定义接口和定义类相似,只是要把 class关键字换为 interface。定义方法时只需要方法名,返回类型和参数列表,不能有方法体。接口中可以定义字段,这些字段都被暗指为 static 和 final,因此应该根据需要先定好这些字段的值。例如:
@e0skc - public interface Flyable {
- void fly();
- }
- public interface Talkable {
- void talk();
- }
- public interface Message {
- int MAX_SIZE = 4096;
- String getMessage();
- }
f4T0Y["QA 上面定义的几个接口中,Flyable 和 Talkable 只定义了一个方法,而 Message 里除了方法外还有一个字段 MAX_SIZE。可以看出这些接口只定义了类的表现形式,而不包含任何实现,所以不能直接使用。要使用这些接口就需要有相应的类去实现它们。实现接口时应该先在类名后用 implements 关键字申明将要实现的接口,如果要实现多个接口,应该用逗号将它们隔开,然后一一实现这些接口中定义的方法。如下面的例子:
U3K<@r - public class Parrot implements Flyable, Talkable {
- public void fly() {
- System.out.println("Flying like a parrot…");
- }
- public void talk() {
- System.out.println("Hello! I am a parrot!");
- }
- }
- public class TextMessage implements Message {
- String message;
- public void setMessage(String msg) {
- message = msg;
- if (message.length() > MAX_SIZE)
- message = message.substring(0, MAX_SIZE);
- }
- public String getMessage() {
- return message;
- }
- }