Colocar esse atributo na subclasse em vez de colocar na classe abstrata não resolve?
Mude disso:
para isso:
[quote=java_coffe][code]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 !! [/code]
[/quote]
Faça um cast de Tecnico para Suporte.
Tecnico tecnico = new Suporte("pedro","12",true);
Suporte suporte = (Suporte)tecnico;
System.out.println( suporte.getStatus() );
[quote=java_coffe][code]public static void incluirTecnico(Tecnico tecnico) {
System.out.println(tecnico.getStatus());//vai dar erro bem aki novamento nao vai achar o metodo status
}
}
[/code]
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 …
[/quote]
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) {
if(tecnico instanceof Suporte){
Suporte suporte = (Suporte)tecnico;
System.out.println(suporte.getStatus());
}
Polimorfismo?
[code]public static void incluirTecnico(Tecnico tecnico) {
// …
}
public static void incluirTecnico(Suporte suporte) {
// …
System.out.println(suporte.getStatus()
}[/code]
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.
[quote=peczenyj]Polimorfismo?
[code]public static void incluirTecnico(Tecnico tecnico) {
// …
}
public static void incluirTecnico(Suporte suporte) {
// …
System.out.println(suporte.getStatus()
}[/code][/quote]
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.
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 ???
[code]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;
}
}[/code]
[code]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;
}
}
[/code]
[code]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 !! [/code]
[code]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
}
}
[/code]
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: