[英]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:實現接口的類必須實現其方法,除非它是抽象的。
如果我正確理解你,你想要一個類來實現一個接口,但是不要實現它的方法。 如果是這樣,你就不能。 除非您正在編寫抽象類 ,否則必須實現接口方法。
我猜你的問題有些缺失,所以請提供一些Interface
和Class
代碼,以便我們給你一個更好的答案。
我覺得你對界面的作用感到困惑。 接口只是定義一個契約,這樣實現接口的任何對象都必須在接口中定義方法。 如果您有一個抽象類,那么您必須為擴展抽象類的任何類實現所述類的抽象方法。 唯一的例外是當你從已經實現了抽象方法或接口的類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.