【问题标题】:Why doesn't extends work with implements?为什么扩展不能与工具一起使用?
【发布时间】:2013-01-10 04:34:49
【问题描述】:

我知道它应该有效,但它没有。我有一个类继承定义如下:

public class VisitManagementForm extends FormWithTitle implements Property.ValueChangeListener {

现在它只允许覆盖extends 的方法,它不会,甚至不允许我实现/覆盖Property.ValueChangeListener 的方法。这是为什么? 我用扩展交换了工具的位置,然后只有工具有效,扩展似乎不可见。

我最近将项目转向了 Maven,是否可能是 Maven 导致了这种疯狂?也许我需要指定一些东西来允许它?还是我只是在这里遗漏了什么?

Property.ValueChangeListener 应该像这样强制实现这个方法:

    @Override
public void valueChange(ValueChangeEvent event) {
    // TODO Auto-generated method stub

}

但是现在我得到了它需要重写或实现超类型方法的错误...

编辑:我在项目中使用 Java 1.6。

编辑:如果我尝试实现其他东西(同时将扩展留在那里),它会建议我实现这些方法,但是如果我实现 ValueChangeListener 它并不建议我实现任何东西,但是如果你然后删除extends 和 leave 只是实现了 ValueChangeListener,然后建议再次实现它的方法。但只要我保持扩展,我似乎得到了上面提到的错误。

【问题讨论】:

  • 不,Maven 与此无关。你能展示更多你的代码吗,也许是一个完整的、可编译的例子?
  • 你用的是哪个版本的java?

标签: java inheritance multiple-inheritance


【解决方案1】:

请注意,您不能将 @Override 注释添加到在 Java 5 中实现接口的方法 - 它会产生错误。在 Java 6 中是允许的

Source

【讨论】:

  • 我更新了我的问题。我在这个项目中使用 Java 6 (1.6),而不是 5。
  • @ArturasM 不带注释是你对所用函数的覆盖吗?
  • 我不确定你的意思?但是如果我删除扩展并只留下工具,它会自动为我创建这个。
【解决方案2】:

你正在做的是非法的多重继承。检查this example from of Java Language specification

【讨论】:

  • 这似乎是可能的答案。假设 FormWithTitle 是 Vaadin Form 子类,它已经实现了 Property.ValueChangeListener - 只需删除“implements Property.ValueChangeListener”
  • 我看不出这有什么关系-您引用的部分是关于从泛型类继承和更改它们的类型。一种预感告诉我,Karthik 的答案是正确的。
  • 我对此表示怀疑,因为当我删除实现 Property.ValueChangeListener 时,它仍然表示相同。所以我假设 FormWithTitle 没有实现 Property.ValueChangeListener
  • 你说得对,我检查了 Vaadin Form 的文档,它确实实现了 Property.ValueChangeListener,但我仍然必须清除导入才能使其正常工作。
【解决方案3】:

如果这是在您切换到 maven 之前工作的代码,原因可能是 maven 编译器插件默认将源版本设置为 1.5,这意味着,正如另一个答案中已经提到的,您不能使用 @987654322 @ 用于接口方法。

【讨论】:

  • 嗯,当我将它转换为 Maven 时,我遇到了问题,所以我不得不指定它是 1.6。所以它已被指定,稍后我添加了实现 Property.ValueChangeListener,但我想这可能仍然相关。不过可能不是。
猜你喜欢
  • 2012-10-24
  • 1970-01-01
  • 1970-01-01
  • 2019-06-07
  • 2010-10-28
  • 2021-04-29
  • 2015-03-16
  • 1970-01-01
  • 2018-03-09
相关资源
最近更新 更多