1
resposta

Funcionou mas não deveria funcionar....

Pessoal, dúvida!!!!

Seguinte, na aula o professor avisou e demonstrou no vídeo que ao serializar o objeto ContaCorrente deveria ocorrer um erro se a interface java.io.Serializable estivesse assinada na Classe ContaCorrente, pois esta classe usa o construtor da classe mãe Conta... No entanto a fim de testar o conceito explicado na aula, fiz o teste deixando a assinatura da interface apenas na classe filha ContaCorrente e o código funcionou quando não deveria funcionar, alguém sabe me explicar o porquê?

Classe mãe Conta não assinou a interface Serializable

public abstract class Conta implements Comparable<Conta>

Classe filha ContaCorrente assinou a interface Serializable

import java.io.Serializable;
public class ContaCorrente extends Conta implements Tributavel, Serializable {

public ContaCorrente(int agencia, int numero) {        
        super(agencia, numero);
    }    

Método main

Cliente cliente = new Cliente();
cliente.setNome("Nico");
cliente.setProfissao("Dev");
cliente.setCpf("234113131");

ContaCorrente cc = new ContaCorrente(222, 333);
cc.setTitular(cliente);
cc.deposita(222.3);

ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("cc.bin"));
oos.writeObject(cc);
oos.close();

O resultado da execução do método main, é a criação do arquivo cc.bin.

Versão do java: `

openjdk version "11.0.9.1" 2020-11-04
OpenJDK Runtime Environment (build 11.0.9.1+1-Ubuntu-0ubuntu1.20.04)
OpenJDK 64-Bit Server VM (build 11.0.9.1+1-Ubuntu-0ubuntu1.20.04, mixed mode, sharing)

`

Desde já agradeço a ajuda!

1 resposta

Oie Alex, tudo bem contigo?

Perdão pela demora!

Dei uma olhada e na verdade o que é dito no "mãos na massa" é que "ContaCorrente" por herdar a classe "Conta", ele utiliza seu construtor, e por conta dessa classe "Conta" não implementar a interface "Serializable" o erro acontece, entretando, ele não comenta que mesmo se a classe "ContaCorrente" implementar o "Serializable" o erro vai acontecer, já que "ContaCorrente" possui liberdade de implementar qualquer interface mesmo que a classe pai dela não tenha. Até se você der uma olhada no vídeo (minuto 3:40, o instrutor implementa a interface "Serializable" na "ContaCorrente" e não em "Conta".

Espero ter conseguido te ajudar, se ainda restar alguma dúvida pode mandar por aqui :)

Bons estudos!