나는 일반적으로 추상 클래스가 Java로 Serializable 될 수 없다는 것을 읽었다. 서브 클래스는 직렬화 가능해야합니다 (예를 들어, 추상 클래스에 필드가있는 경우 사용자 정의 읽기, 쓰기 메소드가 필요할 경우).Java에서 추상 클래스를 직렬화하지 않는 이유는 무엇입니까?
이유가 무엇입니까? 왜 나쁜 디자인으로 간주됩니까?
업데이트 1 : 일부 필드와 세 개의 하위 클래스가있는 추상 클래스가 있습니다. 현재로서는 다음 접근 방식을 사용하고 있습니다.
모든 하위 클래스를 사용자 정의 읽기, 쓰기 메소드로 직렬화 할 수 있습니다. 추상 클래스에는 다음과 같은 메소드가 있습니다.
void writeFields(ObjectOutputStream out)throws IOException { .... }
void readFields(ObjectInputStream in) throws IOException, ClassNotFoundException{ ... }
하위 클래스의 사용자 정의 읽기, 쓰기 메소드에서이 메소드를 호출하여 추상 클래스의 필드를 직렬화합니다. 이 접근법이 맞습니까? 아니면 다른 더 좋은 접근법이 있습니까?
업데이트 2 : 나는 Tom의 조언을 받아 내 추상 클래스 Serializable을 만들었습니다. (나는 모든 서브 클래스를 Serializable로하고 추상적 인 클래스의 데이터를 가지고있다.) 이것은 제쳐두고 사용하는 이야기를 완성하기 위해서이다. reflection to change final fields as advised by Jeremy Manson.
이 질문은 모든 객체 지향 언어에 적용됩니다. –