簡體   English   中英

在抽象類中實現接口參數

[英]Implementing an Interface Parameter in Abstract Class

我在實現此抽象方法時遇到錯誤。 我的目標是使參數能夠成為實現接口DataOutput任何類,例如DataOutputStream

抽象類中的抽象方法:

public abstract void writeMethods(DataOutput o) throws IOException;

在擴展類中實現抽象方法:

public void writeMethods(DataOutputStream d) throws IOException {}

你不能這樣做。 如果抽象方法的參數類型為DataOutput ,則不能用參數類型為DataOutputStream的方法覆蓋它。 返回類型可以更具體,但不能指定參數。

您可以使用泛型來做類似的事情。

public abstract class MyAbstractClass<T extends DataOutput> {
    public abstract void writeMethods(T t);
}

public class MyClass extends MyAbstractClass<DataOutputStream> {
    @Override
    public void writeMethods(DataOutputStream d) { ... }
}

你實際上不能。 通過簽名,您必須使用相同的類類型來實現該方法

如果您想要一個更具體的方法,則可以創建另一個方法,該方法將接受DataOutputStream並由抽象方法的實現調用:

public void writeMethods(DataOutputStream d) throws IOException {
   //do something
}

@Override
public void writeMethods(DataOutput d) throws IOException {
     if(d instanceof DataOutputStream)
          writeMethods((DataOutputStream) d)
     else
          ....  // something else

}

}

方法定義

public void writeMethods(DataOutputStream d) throws IOException

與...不同

public abstract void writeMethods(DataOutput o) throws IOException

因為DataOutputStreamDataOutput是不同的。 在您的具體方法DataOutput可以的實例DataOutputStream ,但你不能把它聲明的方法簽名的方式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM