繁体   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