2010-01-08 53 views
2

我想知道3件事情。class and interface

1:如果我已经在超类中实现了一个接口(有一个方法),那里声明该方法,然后我将该超类延伸到另一个类中。那么我不必重新宣布这种方法是对的?

2:但是,如果我不在超类中但在子类中声明该方法,那么我实例化超类。然后会发生什么?它没有包含实例的任何方法。

3:你可以在类中使用实现,然后不声明该方法?也许它会被用作超类,只能用于其他类的扩展。然后,只需在子类中声明该方法,还是必须在当前正在实现接口的类中声明该方法?

回答

3
  1. 假设你的意思是 “重新实现”,而不是 “重复声明”,这是正确的。

  2. 取决于类是否声明为抽象类。如果超类是抽象的,那么子类或者需要实现它或者要被声明为抽象的。如果超类不是抽象的,那么它将不能编译。

  3. 如果您不想实施它,则声明类抽象。

关于此主题的更多内容Sun tutorial about interfaces and inheritance

2

这被标记为PHP和Java - 我会回答Java。

  1. 对,它会从超类继承方法的实现。

  2. 如果超类仍然被声明为实现接口,那么它将导致编译时错误,所以这是不可能的。

  3. 不,正如我之前所说的,如果您实现了一个接口,那么您必须实现或继承该接口声明的方法。唯一的例外是,如果该类是abstract,在这种情况下,您不需要为接口方法提供实现(隐含地为abstract)。抽象类不能被实例化。

+0

+1 Still:也许值得注意的是,第一个不适用于'private'成员函数和属性。 – Franz 2010-01-08 17:11:37

+2

您不能在界面中使用私有方法。 – danben 2010-01-08 17:12:20

1

只是增加了什么已经回答了第二个问题(用于Java):

正如在其他的答案(由@BalusC)提到的,如果你超告诉它实现了一个接口,没有提供在接口中实现方法,则必须将超类标记为抽象类。但由于它是一个抽象类,所以它是超类。

相关问题