1

我今年 13 岁,对 Java 很陌生。我似乎无法弄清楚如何不从接口实现类中的重写方法,因为它们是引用。我不想制作新副本,也不能只制作(在此处插入类)扩展(接口从中获取一些方法的类)。所以我实现了它,我得到了什么?

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 中的方法的引用,它兼作调试器和游戏库。

4

3 回答 3

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:实现接口的类必须实现其方法,除非它是抽象的。

于 2013-11-03T21:07:07.660 回答
1

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

我猜您的问题中缺少某些内容,因此请提供您的一些代码,Interface以便Class我们为您提供更好的答案。

于 2013-11-03T21:06:30.983 回答
1

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

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

接口的优点之一如下:假设我们有一个对象集合,它们都实现了一个特定的接口,然后我们可以从所有这些对象的接口调用任何方法。注意:我们可以通过使用数组、ArrayList 或将接口作为类型参数的东西将所述对象组合在一起,即ArrayList<MyInterface>

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

for (Shape s : shapes)
{
     System.out.println(s.area());
}
于 2013-11-03T21:10:01.930 回答