51

在java中,当一个接口扩展另一个接口时:

  1. 为什么要实现它的方法?
  2. 当接口不能包含方法体时如何实现其方法
  3. 当它扩展另一个接口而不实现它时,它如何实现方法?
  4. 一个接口实现另一个接口的目的是什么?

这在Java中有主要概念!

编辑:

public interface FiresDragEvents {

  void addDragHandler(DragHandler handler);

  void removeDragHandler(DragHandler handler);
}


public interface DragController extends FiresDragEvents {

  void addDragHandler(DragHandler handler);

  void removeDragHandler(DragHandler handler);

  void dragEnd();

  void dragMove();
}

在 Eclipse 中,除了在DragController.

当我将鼠标悬停时,它说它实现了该方法!!!

4

3 回答 3

79

为什么要实现它的方法?当接口不能包含方法体时,它如何实现它的方法?当它扩展另一个接口而不实现它时,它如何实现方法?一个接口实现另一个接口的目的是什么?

接口不实现另一个接口的方法,而只是扩展它们。需要接口扩展的一个示例是:考虑您有一个具有两种方法的车辆接口,moveForwardmoveBack您还需要合并作为车辆但具有一些附加方法的飞机,例如moveUpmoveDown所以最后你有:

public interface IVehicle {
  bool moveForward(int x);
  bool moveBack(int x);
};

和飞机:

public interface IAirplane extends IVehicle {
  bool moveDown(int x);
  bool moveUp(int x);
};
于 2012-04-19T12:05:35.247 回答
23

接口定义行为。例如,Vehicle接口可能会定义move()方法。

Car 是 Vehicle,但具有其他行为。例如,Car接口可能会定义startEngine()方法。由于 Car 也是 Vehicle,因此Car接口扩展了Vehicle接口,因此定义了两个方法:(move()继承)和startEngine().

Car 接口没有任何方法实现。如果您创建一个实现 Car 的类(大众汽车),它将必须为其接口的所有方法提供实现:move()startEngine().

一个接口不能实现任何其他接口。它只能扩展它。

于 2012-04-19T11:56:36.553 回答
8

ad 1. 它没有实现它的方法。

ad 4. 一个接口扩展而不是实现另一个接口的目的是构建一个更具体的接口。例如,SortedMap是一个扩展Map. 对排序方面不感兴趣的客户端可以针对Mapexample 的所有实例进行编码和处理TreeMap,它实现了SortedMap. 同时,另一个对排序方面感兴趣的客户端可以通过SortedMap接口使用这些相同的实例。

在您的示例中,您正在重复超级接口中的方法。虽然合法,但它是不必要的,并且不会改变任何最终结果。无论这些方法是否存在,编译后的代码都将完全相同。无论 Eclipse 的悬停说什么,都与接口不实现任何东西这一基本事实无关。

于 2012-04-19T11:56:12.037 回答