Classes Abstratas

  Como de ser a construção dessas Classes?. Principalmente da Classe Abstrata?

1) CLASSES: 
  • CLIENTES (CLASSE MÃE) - ABSTRATA
    ATRIBUTOS: REGISTRO, NOME, ENDEREÇO;
    MÉTODOS: SET E GET PARA CADA ATRIBUTO;

Na verdade seriam beans… que herdam da classe mãe…não classes abstratas…

public class Cliente{

private String nome;

public void setNome(String nome){
 this.nome = nome;
}
public String getNome(){
return this.nome;
}
//depois adiciona o restante dos atributos com seus getters e setters

}

Despois se estenderia da classe mãe

public class PessoaFisica extends Cliente{
private String cpf;

public void setCpf(String cpf){
this.cpf = cpf;
}
public String getCpf(){
return this.cpf;
}

}

Aí…quando vc for setar os dados para pessoa física…poderia ser assim
PessoaFisica pf = new PessoaFisica();
pf.setNome(“Cliente1”)
pf.setCpf(“123456789”);

[quote=leopoldof]Na verdade seriam beans… que herdam da classe mãe…não classes abstratas…

public class Cliente{

private String nome;

public void setNome(String nome){
 this.nome = nome;
}
public String getNome(){
return this.nome;
}
//depois adiciona o restante dos atributos com seus getters e setters

}

Despois se estenderia da classe mãe

public class PessoaFisica extends Cliente{
private String cpf;

public void setCpf(String cpf){
this.cpf = cpf;
}
public String getCpf(){
return this.cpf;
}

}

Aí…quando vc for setar os dados para pessoa física…poderia ser assim
PessoaFisica pf = new PessoaFisica();
pf.setNome(“Cliente1”)
pf.setCpf(“123456789”);[/quote]

Ok! Obriado pela ajuda.

Mais fiquei com dúvidas quanto ao atribotu da Classe Pessoa Juridica: No caso do atributo Tipo(comercial, industrial, serviços) Como eu devo colocar esse atributo, e como devo colocar nos metodos set e get?

[quote=leopoldof]Na verdade seriam beans… que herdam da classe mãe…não classes abstratas…
[/quote]

Na pergunta ficou bme óbvio que a classe cliente deve ser abstrata. Com qual conceito vc muda isto e acha que nada será afetado no código ?!?!?!

O correto

public abstract class Cliente{
protected String nome; //Protected para permitir acesso às classes filhas.
// gets e sets
}
public class PessoaFisica extends Cliente {
private String cpf;
// gets e sets
}

[quote=Giulliano][quote=leopoldof]Na verdade seriam beans… que herdam da classe mãe…não classes abstratas…
[/quote]

Na pergunta ficou bme óbvio que a classe cliente deve ser abstrata. Com qual conceito vc muda isto e acha que nada será afetado no código ?!?!?!

O correto

public abstract class Cliente{
protected String nome; //Protected para permitir acesso às classes filhas.
// gets e sets
}

[/quote]

O mais correto:

public abstract class Cliente{
private String nome; 
// gets e sets
}

A existencia de get/set já garante o acesso.

[quote=sergiotaborda]
O mais correto:

public abstract class Cliente{
private String nome; 
// gets e sets
}

A existencia de get/set já garante o acesso.[/quote]

Não vejo como “mais errado” um atributo protected em uma classe abstrata, o modificador de acesso public seria uma péssima idéia na maioria das situações, mas proteced pode depender da sua necessidade e do seu design. Enfim…

Alguns autores até sugerem que se evite usar o modificador protected nos membros da classe, já que na maior parte dos casos ele pode ser trocado por visiblidade pública ou privada com apenas algumas alterações no desenvolvimento.

[quote=Giulliano][quote=sergiotaborda]
O mais correto:

public abstract class Cliente{
private String nome; 
// gets e sets
}

A existencia de get/set já garante o acesso.[/quote]

Não vejo como “mais errado” um atributo protected em uma classe abstrata, o modificador de acesso public seria uma péssima idéia na maioria das situações, mas proteced pode depender da sua necessidade e do seu design. Enfim…[/quote]

Veja, não é uma questão de gosto.
Se o get/set já é publico a classe filha pode acessar por ai. Não ha necessidade de abrir o atributo para protected. Occam’s Razor.

Se não tivessemos get/set ai seria diferente. O atributo continuaria privado e adicionariamos um get/set protected. Os atributos são sempre privados.
E métodos devem ser colocados com o nivel de acesso adquado para permitir a chamadas.

Existem várias razões para isto. Uma delas é o problema do sombreamento da classe filha. ela pode declarar um atributo com o mesmo nome e ai se perde todo. E a herança. Alguem pode modificar a implementação do get/set na hierarqui e vc não quer perder isso.

é vero por isso que eu disse que depende da sua necessidade, existem casos e casos. Mas não vou me aprofundar muito senão a discussão vai longe.