接口扩展另一个接口但实现其方法

Gin*_*ead 43 java extends interface implements

在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();
}
Run Code Online (Sandbox Code Playgroud)

在eclipse中除了实现的方法之外还有实现标志DragController.

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

Ale*_*heo 66

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

接口不实现另一个接口的方法,只是扩展它们.在需要的接口扩展的一个例子是:考虑到你有两种方法车辆接口moveForwardmoveBack但你也需要把飞机是车辆,但一些另外的方法,如moveUp,moveDown所以最后你有:

public interface IVehicle {
  bool moveForward(int x);
  bool moveBack(int x);
};
Run Code Online (Sandbox Code Playgroud)

和飞机:

public interface IAirplane extends IVehicle {
  bool moveDown(int x);
  bool moveUp(int x);
};
Run Code Online (Sandbox Code Playgroud)

  • @overexchange 在这种情况下没有在类之前设计接口。接口描述了一个功能,但是类代表了现实世界的对象。这是类和接口之间的主要区别。没有关于 moveUp moveDown 等。任何车辆都可以前后移动,但并非所有车辆都可以上下移动。飞机可以前后移动,也可以上下移动,但不同类型的飞机会以不同的方式进行。 (2认同)
  • Overexchange,您是说`IVehicle` 接口应该具有所有可以想到的方法(即向上/向下/向后/向前移动)作为具有`IAirplane` 接口来处理这些情况的首选设计吗?汽车的具体实现会让这些方法没有实现吗? (2认同)

JB *_*zet 20

接口定义行为.例如,Vehicle接口可以定义move()方法.

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

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

接口可能不实现任何其他接口.它只能扩展它.

  • 我已经回答了他们.3个第一个问题没有意义,因为接口没有实现另一个接口,并且不包含任何方法实现.第四个问题由我的答案回答:它允许提供额外的行为/方法. (2认同)
  • 我会把它描述为Eclipse的一个小bug.重新声明DragController接口中的方法没有意义,除非您想要提供额外的javadoc. (2认同)

Mar*_*nik 7

ad 1.它没有实现其方法.

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

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