Ola a todos
Estou aqui estudando serialização e, qdo estava fazendo alguns testes aconteceu o seguinte:
package br.com.certificacao.cap_6.classes;
import java.io.*;
/**
* Classe que vai nos ajudara entender o conceito de herança com objetos
* serializados.
* A superclasse Animal não é serializada
* */
public class Bird extends Animal implements Serializable{
String tipo;
public Bird(String tipo, int weight) {
super("Passaro");
System.out.println("Construtor de Bird this.weight= "+this.weight);
this.tipo= tipo;
this.weight = weight;
System.out.println("Ja preencheu os valores de Bird");
}
public String getTipo(){
return this.tipo;
}
public int getWeight(){
return this.weight;
}
}
package br.com.certificacao.cap_6.classes;
public class Animal {
int weight = 42;
Animal(String a){
System.out.println("Construtor de animal "+a);
}
Animal(){
System.out.println("Construtor de animal ");
}
}
package br.com.certificacao.cap_6;
import br.com.certificacao.cap_6.classes.*;
import java.io.*;
public class Serializacao_33 {
public static void main(String[] args){
Bird bird = new Bird("Pardal", 12);
System.out.println(" Antes de serializar \n tipo= "+bird.getTipo()+", tamanho= "+bird.getWeight());
try{
FileOutputStream fos = new FileOutputStream("testeSerBird.ser");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(bird);
oos.close();
}catch(IOException e){}
try {
FileInputStream fis = new FileInputStream("testeSerBird.ser");
ObjectInputStream ois = new ObjectInputStream(fis);
bird= (Bird)ois.readObject();
ois.close();
}catch(IOException io){
io.printStackTrace();
}catch(ClassNotFoundException ce){ce.printStackTrace();}
System.out.println(" DEPOIS de serializar \n tipo= "+bird.getTipo()+", tamanho= "+bird.getWeight());
}
}
Pois bem, o que aconteceu é que se eu comentar o construtor Animal() qdo for deserializar ocorre um erro:
java.io.InvalidClassException: br.com.certificacao.cap_6.classes.Bird; no valid constructor
at java.io.ObjectStreamClass.<init>(Unknown Source)
at java.io.ObjectStreamClass.lookup(Unknown Source)
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.writeObject(Unknown Source)
Achei isso “sinistro”!!
Sera que para de-serializar a superclasse não pode conter um construtor sobrecarregado?
Ou eu to fazendo algo errado?
T+!
