DAO perdendo a conexão

Pessoal eu tenho 3 métodos em um determinado DAO :

public void cadastrarPessoa(Pessoa pessoa);
public void cadastrarPessoaFisica(PessoaFisica pessoa); 
public void cadastrarPessoaJuridica(PessoaJuridica pessoa);

O primeiro método a ser executado é o cadastrarPessoa, segue o código:

public void cadastrarPessoa(Pessoa pessoa) { 
      String query = "INSERT INTO TABELA(.....) VALUES (......)";
      PreparedStatement stmt = conexao.prepareStatement(query);
      ......................
      stmt.execute();
      pessoa.cadastrar();
}

A classe Pessoa é abstrata e possui o método cadastrar, e as subclasses PessoaFisica e PessoaJuridica implementam esse método. Segue o código abaixo:

PessoaFisica:

@Override
public void cadastrar() throws SQLException {
	dao.cadastrarPessoaFisica(this);
}

PessoaJuridica:

@Override
public void cadastrar() throws SQLException {
	dao.cadastrarPessoaJuridica(this);
}

O método cadastrarPessoa está sendo executado normalmente e sendo salvo no banco, porém os métodos específicos: cadastrarPessoaFisica e cadastrarPessoaJuridica não estão sendo executados. Percebi que quando a execução passa por esses métodos, a conexão é perdida. Alguém tem idéia do que possa ser?

O método que foi sobrescrito espera receber uma instância da classe Pessoa. Vc não está passando esse objeto…

@camachojr: O método sobrescrito, cadastrar() não recebe nenhuma instância da classe Pessoa. Já os métodos cadastrarPessoaFisica e cadastrarPessoaJuridica, esses sim esperam receber instâncias de PessoaFisica e PessoaJuridica respectivamente, e eu passo essas instâncias utilizando o operador this.

O problema é que eu estou executando um método que possui um PreparedStatement (cadastrar) e o insert está sendo feito normalmente. Porém quando eu chamo o método cadastrarPessoaFisica ou cadastrarPessoaJuridica a conexão é perdida.

public void cadastrarPessoa(Pessoa pessoa) { 
       String query = "INSERT INTO PESSOAS(.....) VALUES (.........)";
       PreparedStatement stmt = conexao.prepareStatement(query);
       ..........................................................................................
       stmt.execute();            //O insert é feito normalmente
       pessoa.cadastrar();     //irá chamar ou cadastrarPessoaFisica ou cadastrarPessoaJuridica

O problema é quando chega nos métodos cadastrarPessoaFisica ou cadastrarPessoaJuridica. A conexão é perdida, e não consigo realizar o INSERT nas tabelas específicas (PESSOA_FISICA ou PESSOA_JURIDICA)