Я хочу иметь базовый класс BaseConnect
, который содержит OutputStream
и дочерние классы ObjectStreamConnect
и DataStreamConnect
. В моем классе BaseConnect
у меня есть OutputStream os;
, а в моих классах Two child у меня есть конструкторы, которые делают "os = ObjectOutputStream(...)
" или "os = DataOutputStream(...)
" соответственно.
Поскольку ObjectOutputStream
s имеют метод writeObject(Object o)
, а DataOutputStreams
- нет, кажется, что мой класс ObjectStreamConnect
не может сделать "os.writeObject(object)
", поскольку родительский класс OutputStream
не имеет иметь writeObject(Object o)
.
Я уверен, что это вонючий код, и мне интересно, как с этим справиться.
Мои мысли:
Я думал о том, чтобы сделать метод, содержащий os.writeObject
абстрактный, так, чтобы ObjectStreamConnect
мог реализовать его по-другому, но потом я понял, что DataStreamConnect
также должен будет реализовать его, в чем он не нуждается.
Я также не хочу просто избавляться от родителя, и два класса реализуют все по отдельности, потому что у них есть много одинаковых методов с одинаковыми реализациями.
Пожалуйста, помогите. Почему-то ответ на эту проблему мне не приходит.
JBU
edit: я не могу вставить весь код, но он выглядит примерно так:
public class BaseConnect {
OutputStream os;
...
}
public class ObjectStreamConnect extends BaseConnect {
public ObjectStreamConnect () {
...
os = new ObjectOutputStream(socket.getOutputStream);
}
public void writeObject(Object o) {
os.writeObject(o);
}
}
public class DataStreamConnect extends BaseConnect {
public DataStreamConnect () {
...
os = new DataOutputStream(socket.getOutputStream);
}
}