繁体   English   中英

接口和覆盖接口的方法

[英]interface and overriding the methods of the interface

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

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

例如

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

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM