[英]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.