接口和覆盖接口的方法

时间:2013-11-03 21:00:02

标签: java interface override

我13岁,对java很新。我似乎无法弄清楚的是如何不从接口实现类中的重写方法,因为它们是引用。我不想创建一个新的副本,我不能只是make(在这里插入Class)扩展(接口获取它的一些方法的类)。所以我实现了它,我得到了什么?

err: The type Threadmanager must implement the inherited abstract method (the method)

然后它有一个列表,其中一个表示“实现未经加工的方法”。

但我不想实施任何方法!我想用它们!

Threadmanager tm;
AwtUtils manager = tm;
manager.drawImage(/*params*/)

以上就是我想要的,以下是我不想要的:

@override
public void drawImage(/*params*/){
...
}

我不想重新定义界面中的方法,只需使用它们即可。我不能让类ThreadManager扩展Debugger(.java),因为它已经扩展了一些东西。我认为接口是一种你可以在另一个类中使用这些方法而不通过“class foo extends bar”继承它们的方法

顺便说一下,接口中引用的所有方法都是对我的类Debugger.java中的方法的引用,它们兼作调试器和游戏库。

3 个答案:

答案 0 :(得分:2)

您无法使用界面中的方法。接口没有代码,只有定义。将其视为功能合同,实现它的类必须实现。

例如

public interface Example {
    public void method1ToImplement();
    public int method2ToImplement(final String input);
}

这是一个实现此接口的所有类必须满足的合同。这意味着implements Example必须实现public void method1ToImplement()public int method2ToImplement(String)的任何可实例化的类。这是因为您声明此类实现了此功能,因此您必须实现此功能,因为到目前为止,您的类中没有此功能的代码,因为该接口不包含代码。例如,您无法使用List中的方法,实际上您甚至无法创建新的List,因为它是一个接口。但是你可以创建和ArrayList并使用它的方法,因为它是一个实现List接口的非抽象类。

也许您感到困惑,因为您在其他地方看到了您可以使用已经实现的方法,例如toString()(已在所有类中实现)。这是因为此方法未在接口中定义,而是由父类定义(在toString()的情况下,它是实现它的Object)。

TL; DR:实现接口的类必须实现其方法,除非它是抽象的。

答案 1 :(得分:1)

如果我正确理解你,你想要一个类来实现一个接口,但是不要实现它的方法。如果是这样,你就不能。除非您正在编写抽象类

,否则必须实现接口方法

我猜你的问题有些缺失,所以请提供一些InterfaceClass的代码,以便我们为您提供更好的答案。

答案 2 :(得分:1)

我认为你对界面的作用感到困惑。接口只是定义一个契约,这样实现接口的任何对象都必须在接口中定义方法。如果您有一个抽象类,那么您必须为扩展抽象类的任何类实现所述类的抽象方法。唯一的例外是当你从已经实现抽象方法或接口的类中extend并且你不想/需要为子类重新定义它们时。

你说你不想实现这些方法,你只想使用它们,但你不能使用不存在的方法。实现一个接口并没有神奇地定义接口中方法中的逻辑 - 这是你的工作。同样,它只是声明实现接口的任何对象都将定义接口的方法。

关于接口的一个好处是:让我们假设我们有一个对象集合,它们都实现了特定的接口,然后我们就可以从接口上调用所有这些对象的任何方法。注意:我们可以通过使用数组,ArrayList或者将接口作为类型参数的对象将所述对象组合在一起,即ArrayList<MyInterface>

更具体的例子:
让我们考虑一个Shape接口,它只包含一个区域方法的头。我们可以有一堆不同类型的形状来实现Shape界面(圆形,正方形等)。在每个形状类中,我们定义一个方法来获得所述形状的区域。现在,如果我们有ArrayList<Shape> shapes =...,我们可以将不同类型的形状放入该列表中并执行以下操作:

for (Shape s : shapes)
{
     System.out.println(s.area());
}