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

 

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