Bom dia pessoal,
Pra matar aquela ansiedade que ficou no post anterior… e que ansiedade que eu causei em… quase duas semanas… desculpa pessoal pelo atraso.
Assunto
Serialização e Herança
Regras
1. Se a superclasse for Serializable, todas as subclasses também serão.
2. Se a classe filha for Serializable, a classe pai não precisa ser obrigatoriamente Serializable.
3. Se a classe filha for Serializable e a classe pai não for, na classe pai as variáveis serão inicializadas e o construtor será chamado.
Veja um exemplo abaixo:
public class ManipulandoSerializacaoComHeranca {
public static void main(String[] args) {
Moto moto = new Moto(“Susuki”, 240d);
try {
System.out.println(“Antes – Moto: “ + moto.getMarca() + “, “ + moto.getVelocidadeMaxima() + “, ” + moto.getQuantidadeRoda());
FileOutputStream fos = new FileOutputStream(“arquivo.txt”);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(moto);
oos.close();
} catch (Exception e) { e.printStackTrace(); }
try {
FileInputStream fis = new FileInputStream(“arquivo.txt”);
ObjectInputStream ois = new ObjectInputStream(fis);
moto = (Moto) ois.readObject();
ois.close();
System.out.println(“Depois – Moto: “ + moto.getMarca() + “, ” + moto.getVelocidadeMaxima() + “, “ + moto.getQuantidadeRoda());
} catch (Exception e) { e.printStackTrace(); }
}
}
public class Automovel {
protected Double velocidadeMaxima;
protected Integer quantidadeRoda = 4;
public Automovel() {
System.out.println(“Acesso ao construtor Automovel”);
velocidadeMaxima = 60d;
}
public Double getVelocidadeMaxima() {Â return velocidadeMaxima;Â }
public Integer getQuantidadeRoda() { return quantidadeRoda; }
}
public class Moto extends Automovel implements Serializable {
private static final long serialVersionUID = -5169128571918185183L;
private String marca;
public Moto(String marca, Double velocidadeMaxima) {
this.quantidadeRoda = 2;
this.marca = marca;
this.velocidadeMaxima = velocidadeMaxima;
}
public String getMarca() { return marca; }
}
Console:
Acesso ao construtor Automovel // new Moto()
Antes – Moto: Susuki, 240.0, 2
Acesso ao construtor Automovel //Â ois.readObject()
Depois – Moto: Susuki, 60.0, 4 // seta os valores default
…
Altere a classe Automovel para “implements Serializable” e veja o resultado:
Console:
Acesso ao construtor Automovel
Antes – Moto: Susuki, 240.0, 2
Depois – Moto: Susuki, 240.0, 2
Repare que o construtor Automovel não foi chamado na execução “ois.readObject()” e os valores foram mantidos.
É isso ai pessoal, compartilhem, comentem e estudem!
Escrito por Marcos Oto Picarelli Prado
RSS dos comentários deste post · TrackBack URI
Comente