Каковы преимущества реализации родительского интерфейса по сравнению с дочерним интерфейсом этого интерфейса для вашего класса - PullRequest
0 голосов
/ 04 августа 2020

Я работаю с JAR, предоставленным другой командой, это JAR шифрования, и его использование возвращает объект, который реализует Closeable вместо OutputStream (OutputStream реализует Closeable), но он все еще реализует все методы, которые необходимы, чтобы быть OutputStream (они фактически используют OutputStream внутри своего кода).

Closeable Object:

public class EncryptionOutputStream implements Closeable {

    public void write(int b) throws IOException {
       ...
    }

    public void write(byte b[]) throws IOException {
       ...
    }

    public void write(byte b[], int off, int len) throws IOException {
       ...
    }

    public void flush() throws IOException {
       ...
    }

    public void close() throws IOException {
       ...
    }
}

vs

OutputStream Объект:

public class EncryptionOutputStream extends OutputStream {

    public void write(int b) throws IOException {
       ...
    }

    public void write(byte b[]) throws IOException {
       ...
    }

    public void write(byte b[], int off, int len) throws IOException {
       ...
    }

    public void flush() throws IOException {
       ...
    }

    public void close() throws IOException {
       ...
    }
}

OutputStream - это то, что мне нужно, и то, что требуют другие классы их собственного кода.

Код, требующий OutputStream:

public void copy(InputStream src, OutputStream dest){
    ...
{

Мне было интересно, какие преимущества реализации класса более высокого уровня, как это было бы? Похоже, что реализация дочернего класса будет полезна не только в этом случае, поскольку OutputStream так широко используются, но и во всех случаях, потому что если класс требует OutputStream в качестве параметра, вы не можете использовать Closeable, но если класс требует Closeable в качестве параметра, вы можете использовать как Closeable, так и OutputStream.

...