[英]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
因為DataOutputStream
和DataOutput
是不同的。 在您的具體方法DataOutput
可以的實例DataOutputStream
,但你不能把它聲明的方法簽名的方式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.