Сериализуем наследование. Частично, если у меня естьЯвляется сериализуемым наследуемым
class A implements Serializable{}
class B extends A{}
Является ли класс B сериализуемым?
Сериализуем наследование. Частично, если у меня естьЯвляется сериализуемым наследуемым
class A implements Serializable{}
class B extends A{}
Является ли класс B сериализуемым?
Да. Это следует из концепции наследования в Java. Так как A сериализуемо и B расширяет A, B является serializalbe.
Обратите внимание, что все нестатические непереходные поля A и B также должны содержать объекты, которые могут быть сериализованы, иначе во время выполнения будет выполняться исключение NotSerializableException, когда вы попытаетесь их сериализовать.
Да, если суперкласс реализует serializable, то и под-классы.
Да, подкласс Serializable класса также сериализации
Для получения дополнительной информации
http://docs.oracle.com/javase/1.5.0/docs/api/java/io/Serializable.html
http://java.sun.com/developer/technicalArticles/ALT/serialization/
Если класс Сериализуемый то все подклассы Сериализуемые. Но если вы хотите предотвратить подкласс, чей суперкласс Serializable может быть сериализуемым, это также возможно.
Если вы хотите, чтобы предотвратить то использовать
NotSerializableException - Брошенный, когда требуется экземпляр иметь Serializable интерфейс. Сериализация или класс экземпляра могут вызывать это исключение. Аргументом должно быть имя класса.
см Официальные документы - http://docs.oracle.com/javase/6/docs/api/java/io/NotSerializableException.html
Используя его, таким образом, вы можете выполнить эту задачу
private void writeObject(ObjectOutputStream out) throws IOException {
throw new NotSerializableException(“Not today!”);
}
private void readObject(ObjectInputStream in) throws IOException {
throw new NotSerializableException(“Not today!”);
}
Как насчет подклассов сериализации Но родительский класс не
Если Sub-класс является Serializable, это абсолютно не означает, что его суперкласс также является Serializable. Когда подкласс сериализуется, будет создан конструктор без аргументов суперкласса.
Интерфейсы имеют другую очень важную роль в Java программирование языка. Интерфейсы не являются частью иерархии классов, хотя работают в комбинации с классами. Язык программирования Java не допускает множественного наследования (наследование рассматривается ниже в этом уроке), но интерфейсы предоставляют альтернативу.
В Java класс может наследовать только от одного класса, но он может реализовать более одного интерфейса. Следовательно, объекты могут иметь несколько типов: тип их собственного класса и типы всех интерфейсов, которые они реализуют .Это означает, что если переменная объявлена как тип интерфейса , ее значение может ссылаться на любой объект, который является , созданный из любого класса, который реализует интерфейс. Это , рассмотренный ниже в этом уроке, в разделе «Использование интерфейса как тип».
Я предполагаю, что вы имеете в виду, если у вас есть функция foo
которая получает (Serializable ptr)
, вы можете назвать его с экземпляром Class B
поэтому ответ да, то есть идея.
Кроме того, вы можете переопределить реализацию A (предка).
ли следующая проверка на данном коде
boolean b = new B() instanceof Serializable;
System.out.println(b);
который возвращает true
Всех интерфейсов, реализованных базовые классы наследуются их производные классами. Не только Serializable.
Я согласен с тем, что Serializable-ness наследуется, но имеет проблемы (хотя и редко), когда этот факт не распознается случайным инструментом. Поэтому, даже если это не требуется, я сделаю дополнительные усилия, чтобы объявить подкласс как реализацию Serializable.
'B' не является сериализуемым, он наследует от суперкласса, реализует интерфейс Serializable, IMO, который имеет значение семантики в Java. – 0x90
Это ясно упоминается в Java [docs] (http://docs.oracle.com/javase/1.5.0/docs/api/java/io/Serializable.html), "* Сериализуемость класса включена класс, реализующий интерфейс 'java.io.Serializable'. Классы, которые не реализуют этот интерфейс, не будут иметь своего состояния, сериализованного или десериализованного. ** Все подтипы сериализуемого класса сами сериализуемы. ***« – Lion
@ 0x90 : Расширение класса или реализация интерфейса точно определяет отношение * к *. Так что да, B * является * Serializable. –