Я читал, что обычно абстрактные классы не следует делать сериализуемыми в Java. Подклассы должны быть сериализуемыми (с помощью специальных методов чтения и записи, если требуется, например, когда абстрактные классы имеют поля).
В чем причина этого? Почему это считается плохим дизайном?
Обновление1: У меня есть абстрактный класс с некоторыми полями и тремя подклассами. На данный момент я использую следующий подход.
Я сделал все подклассы сериализуемыми с помощью специальных методов чтения и записи. В абстрактном классе у меня есть следующие методы.
void writeFields(ObjectOutputStream out)throws IOException { .... }
void readFields(ObjectInputStream in) throws IOException, ClassNotFoundException{ ... }
В пользовательских методах чтения и записи в подклассах я вызываю эти методы для (де) сериализации полей в абстрактном классе. Это правильный подход? Или есть другой лучший подход?
Обновление 2: Я взял Тома и сделал мой абстрактный класс Serializable. (Я хочу, чтобы все подклассы были сериализуемыми, и у меня есть данные в абстрактном классе). Это отступление, но для завершения истории я использую отражение для изменения конечных полей, как советует Джереми Мэнсон.