Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa tarde,
Sou iniciante em JAVA, será que alguém aqui pode me ajudar numa questão?
Preciso acessar um atributo de uma classe estendida a partir de uma Classe DAO, não estou conseguindo quem puder me ajudar a resolver isso agradeço desde já...
Classe Pai:
public class ClienteBEAN {
private Integer id_cliente;
private Integer fk_id_segmento;
private Long cli_cnpj;
private String cli_nome_cliente;
private String cli_sigla;
public ClienteBEAN() {
}
public ClienteBEAN(Integer id_cliente, Integer fk_id_segmento, Long cli_cnpj, String cli_nome_cliente, String cli_sigla) {
this.id_cliente = id_cliente;
this.fk_id_segmento = fk_id_segmento;
this.cli_cnpj = cli_cnpj;
this.cli_nome_cliente = cli_nome_cliente;
this.cli_sigla = cli_sigla;
}
public Integer getId_cliente() {
return id_cliente;
}
public void setId_cliente(Integer id_cliente) {
this.id_cliente = id_cliente;
}
public Integer getFk_id_segmento() {
return fk_id_segmento;
}
public void setFk_id_segmento(Integer fk_id_segmento) {
this.fk_id_segmento = fk_id_segmento;
}
public Long getCli_cnpj() {
return cli_cnpj;
}
public void setCli_cnpj(Long cli_cnpj) {
this.cli_cnpj = cli_cnpj;
}
public String getCli_nome_cliente() {
return cli_nome_cliente;
}
public void setCli_nome_cliente(String cli_nome_cliente) {
this.cli_nome_cliente = cli_nome_cliente;
}
public String getCli_sigla() {
return cli_sigla;
}
public void setCli_sigla(String cli_sigla) {
this.cli_sigla = cli_sigla;
}
@Override
public String toString() {
return "ClienteBEAN [id_cliente=" + id_cliente + ", fk_id_segmento="
+ fk_id_segmento + ", cli_cnpj=" + cli_cnpj
+ ", cli_nome_cliente=" + cli_nome_cliente + ", cli_sigla="
+ cli_sigla + "]";
}
}
Classe Filha
public class GovernoBEAN extends ClienteBEAN {
private Integer cli_uasg;
private String cli_unidade_vinculada;
public GovernoBEAN() {
}
public GovernoBEAN(Integer fk_id_segmento, Integer cli_uasg, String cli_unidade_vinculada) {
this.cli_uasg = cli_uasg;
this.cli_unidade_vinculada = cli_unidade_vinculada;
}
public Integer getCli_uasg() {
return cli_uasg;
}
public void setCli_uasg(Integer cli_uasg) {
this.cli_uasg = cli_uasg;
}
public String getCli_unidade_vinculada() {
return cli_unidade_vinculada;
}
public void setCli_unidade_vinculada(String cli_unidade_vinculada) {
this.cli_unidade_vinculada = cli_unidade_vinculada;
}
@Override
public String toString() {
return "GovernoBEAN [cli_uasg=" + cli_uasg + ", cli_unidade_vinculada="
+ cli_unidade_vinculada + "]";
}
}
Classe DAO
public class ClienteDAO implements IDAO<ClienteBEAN> {
public void save(ClienteBEAN entidade) throws PersistenciaException {
Connection conn = Conexao.open();
PreparedStatement pstm = null;
String sql = "INSERT INTO tb_cliente(fk_id_segmento, cli_uasg, cli_cnpj, cli_inscricao_estadual, cli_data_abertura, cli_nome_cliente, "
+ "cli_sigla, cli_unidade_vinculada) VALUES (?, ?, ?, ?, ?, ?, ?, ?)";
try {
pstm = conn.prepareStatement(sql);
pstm.setInt(1, entidade.getFk_id_segmento());
pstm.setInt(2, entidade.getFk_id_segmento());
pstm.setLong(3, entidade.); //preciso acessar aqui o atributo cli_uasg que está na Classe Filha.....
pstm.setString(6, entidade.getCli_nome_cliente());
pstm.setString(7, entidade.getCli_sigla());
pstm.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
Conexao.close(conn, pstm, null);
}
}
public int findMaxId() {
Connection conn = Conexao.open();
PreparedStatement pstm = null;
ResultSet rs = null;
String sql = "SELECT MAX(id_cliente) FROM tb_cliente";
int id = 0;
try {
pstm = conn.prepareStatement(sql);
rs = pstm.executeQuery();
if (rs.next()) {
id = rs.getInt(1);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
Conexao.close(conn, pstm, rs);
}
return id;
}
}
Aparentemente as duas classes estão no mesmo package. Então você terá que fazer apenas uma coisa: mudar o encapsulamento dos atributos da classe ClienteBEAN de private para protected. Se for private, nenhuma outra classe tem acesso aos atributos, mesmo que seja filha. Quando é protected, todas as classes no mesmo package tem acesso aos atributos desta classe, inclusive as filhas.
Então talvez você tenha si perguntado: E as outras classes que não são extendidas, como impeço o acesso dessas aos atributos da classe mãe?
Você deve colocar as que não extendem de ClienteBEAN em um package diferente. A classe mãe e suas classes filhas devem compartilhar os mesmo package. Assim você faz o empacotamento corretamente.