Colocar esse atributo na subclasse em vez de colocar na classe abstrata não resolve?
Re:diagrama de classe duvida
10 Respostas
Mude disso:
para isso:
Faça um cast de Tecnico para Suporte.public class Aplic { public static void main(String[] args) { Tecnico tecnico = new Suporte("pedro","12",true); System.out.println( tecnico.getStatus() ); // vai dar erro aki nessa linha pq o objeto tecnico nao consegue enchergar esse metodo da classe suporte } } Portanto isso nao resolveria meu problema somente se Tecnico podesse enchergar axo que daria certo !! :cry:
Tecnico tecnico = new Suporte("pedro","12",true);
Suporte suporte = (Suporte)tecnico;
System.out.println( suporte.getStatus() );
Novamente, faça cast! Mas antes faça uma verificação com instanceof para se certificar de que a referência recebida pelo método está referenciando um objeto Suporte, com isso vc tem acesso ao status através do método getStatus().public static void incluirTecnico(Tecnico tecnico) { System.out.println(tecnico.getStatus());//vai dar erro bem aki novamento nao vai achar o metodo status } }Mas no banco de dados eu vo estar incluíndo um objeto do tipo Tecnico sendo que ele pode ser um de Suporte ou Admnistrador .... no caso de ser de SUporte eu nao vo poder jogar pro banco o status dele ....
public static void incluirTecnico(Tecnico tecnico) {
if(tecnico instanceof Suporte){
Suporte suporte = (Suporte)tecnico;
System.out.println(suporte.getStatus());
}
Polimorfismo?
public static void incluirTecnico(Tecnico tecnico) {
// ...
}
public static void incluirTecnico(Suporte suporte) {
// ...
System.out.println(suporte.getStatus();)
}
Ou q tal implementar um toString()? E imprimir o que vc quiser?
public static void incluirTecnico(Tecnico tecnico) {
System.out.println(suporte.toString());
}
Uma terceira opção é criar um adapter.
Polimorfismo?Polimorfismo está relacionado a sobrescrição de métodos, e não a sobrecarga. O polimorfismo não determina qual versão sobrecarregada será chamada, apenas a versão sobrescrita de um método.public static void incluirTecnico(Tecnico tecnico) { // ... } public static void incluirTecnico(Suporte suporte) { // ... System.out.println(suporte.getStatus();) }
A versão do método incluirTecnico que recebe um Tecnico sempre será utilizada mesmo se for passado a ele uma referência do tipo Tecnico que aponte para um objeto mais abaixo na árvore de herança, por exemplo Suporte, a menos que vc passe uma variável de referência do tipo Suporte para que o outro método seja utilizado (sobrecarga), mas ai vc não tira muito proveito de possuir uma classe abstrata, que acredito que não seja o que o java_coffe quer olhando o seu código. Eu acho que cada caso é um caso, e com certeza existem melhores soluções. Nesse caso específico, tratam-se de poucas classes que herdam de uma classe abstrata e acredito não haver muitos problemas. A medida que a "coisa" for aumentando pode-se ou melhor, deve-se repensar a solução do problema. Essa é a minha humilde opinião, que está looooooooonge de ser verdade absoluta.
Gente eu tenho uma classa abstrata chamada Técnico que é abstrata e contem os atributos para as sub classes herdarem …so que tem um pequeno problema . Tem um atributo chamado “Status” que na verdade tem que se herdada apenas pela classe suporte . Tem uma forma de eu resolver essa questão de modelagem ???
public abstract class Tecnico {
private String nome ;
private String idade ;
public Tecnico(String nome, String idade) {
super();
this.nome = nome;
this.idade = idade;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getIdade() {
return idade;
}
public void setIdade(String idade) {
this.idade = idade;
}
}
public class Suporte extends Tecnico {
private boolean status = true ;
public Suporte(String nome, String idade, boolean status) {
super(nome, idade);
this.status = status;
}
public boolean getStatus() {
return status;
}
public void setStatus(boolean status) {
this.status = status;
}
}
public class Aplic {
public static void main(String[] args) {
Tecnico tecnico = new Suporte("pedro","12",true);
System.out.println( tecnico.getStatus() ); // vai dar erro aki nessa linha pq o objeto tecnico nao consegue enchergar esse metodo da classe
suporte
}
}
Portanto isso nao resolveria meu problema somente se Tecnico podesse enchergar axo que daria certo !! :cry:
public class Aplic {
public static void main(String[] args) {
Tecnico tecnico = new Suporte("pedro","12",true);
Suporte suporte = (Suporte)tecnico;
System.out.println( suporte.getStatus() );
incluirTecnico(suporte);
}
public static void incluirTecnico(Tecnico tecnico) {
System.out.println(tecnico.getStatus());//vai dar erro bem aki novamento nao vai achar o metodo status
}
}
Mas no banco de dados eu vo estar incluíndo um objeto do tipo Tecnico sendo que ele pode ser um de Suporte ou Admnistrador .... no caso de ser de SUporte eu nao vo poder jogar pro banco o status dele ....
O problema é que eu vo armazenar no banco de dados os dados da classe Tecnico …so que o Técnico vai ser um Administrador ou Suporte !!!
Na hora de armazenar no banco vo criar um dos 2 sendo que tem vezes que eu vo incluir com o atributo Status e outra hora nao …devido ao fato de so o de Suporte te o atributo status !!! 
Ja to querendo uma forma boa de fazer isso para nao me preucupar futuramente com alterações …
Alguem pode dar uma dica !? :?: :shock: