Problemas no entendimento do DefaultTableModel, em uma jTable no Java Swing

Gostaria de entender qual a diferença primordial entre um DefaultTableModel e o getModel de uma jTable qualquer. Para melhor explicar, vou dar um exemplo:

Object[] objetoQualquer = {1, "exemplo"};
        
        //parte 1:
        JTable tabela = new JTable();
        tabela.getModel();
        
        //parte2:
        DefaultTableModel modeloDefault = new DefaultTableModel();
        modelDefault.addRow(objetoQualquer);

Usando o DefaultTableModel, consigo adicionar ao modeloDefault dados em formato de objeto, com o método addRow, por exemplo. Mas, quando uso o getModel (que em teoria me retorna também um modelo de tabela), não tenho acesso a esse método para adicionar linhas inteiras. Fico me perguntando o porquê disso, já que, ao meu ver, tanto o modeloDefault quanto o getModel são modelos de tabelas.

Dessa forma que está, na maioria dos casos em que não quero criar meu próprio TableModel, acabo usando um cast para “forçar” o uso do DefaultTableModel:

this.modelDefault = (DefaultTableModel) this.jTableTabela.getModel();

Se alguém puder me explicar, agradeço.

Isso pq o método getModel devolve a interface TableModel, e realmente essa interface não possui o método addRow, que é da classe DefaultTableModel.

É correto utilizar o cast para ter acesso aos métodos do DefaultTableModel, ou existe uma maneira melhor de preencher uma JTable linha a linha?

É correto sim.

O que não é recomendado é usar a DefaultTableModel. O melhor seria vc criar sua própria classe à partir da AbstractTableModel, pois vai facilitar muito a sua vida.

Tem um post com um exemplo de como usar: DefaultTableModel model - Mostrar valores - #2 por Lucas_Camara, e nesse mesmo tópico tem um exemplo de como usar de forma genérica também.