Estou desenvolvendo uma aplicação Java que se trata de uma loja de armas. Possuo a classe Produto com as subclasses Arma, Faca e Munição. Neste projeto estou aplicando o padrão DAO, porém não entendi muito bem como funciona a sua aplicação em subclasses.
DAO da classe Produto:
public class ProdutoDAO implements GenericDAO<Produto> {
Connection connection = null;
@Override
public void save(Produto produto) throws SQLException {
try {
connection = new ConnectionFactory().getConnection();
String sql = "INSERT INTO PRODUTO(ID, ID_MARCA, DESCRICAO,"
+ "PESO) VALUES (?, ?, ?, ?);" ;
PreparedStatement pstm = connection.prepareStatement(sql);
pstm.setInt(1, produto.getId());
pstm.setString(2, produto.getDescricao());
pstm.setDouble(3, produto.getPeso());
pstm.execute();
} catch (SQLException sqle) {
JOptionPane.showMessageDialog(null, "Erro ao inserir o produto no "
+ "banco de dados." + sqle.getMessage());
sqle.printStackTrace();
} catch (Exception ex) {
JOptionPane.showMessageDialog(null,
"Ocorreu um erro. Contate o suporte.\n" + ex.getMessage());
ex.printStackTrace();
} finally {
connection.close();
}
}
}
Classe Produto:
public abstract class Produto {
private int id;
private String descricao;
private Marca marca;
private double peso;
public Produto(int id, String descricao, Marca marca, double peso) {
this.id = id;
this.descricao = descricao;
this.marca = marca;
this.peso = peso;
}
public int getId() {
return id;
}
public String getDescricao() {
return descricao;
}
public Marca getMarca() {
return marca;
}
public double getPeso() {
return peso;
}
@Override
public String toString() {
return id + "|" + descricao + "|" + marca + "|" + peso;
}
Subclasse Arma:
public class Arma extends Produto {
private int numeracao;
private Municao municao;
private int capacidade;
private boolean baioneta;
public Arma(int id, String descricao, Marca marca, double peso) {
super(id, descricao, marca, peso);
}
}
A minha dúvida é em relação à classe ArmaDAO. Como devo implementá-la? Ela deve estender a classe ProdutoDAO? A classe ProdutoDAO deve ser abstrata? Obrigado desde já.