簡體   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