Re:diagrama de classe duvida

10 respostas
Andre_Brito

Colocar esse atributo na subclasse em vez de colocar na classe abstrata não resolve?

10 Respostas

A

Mude disso:

para isso:

J
java_coffe:
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:
Faça um cast de Tecnico para Suporte.
Tecnico tecnico = new Suporte("pedro","12",true);
Suporte suporte = (Suporte)tecnico;   
System.out.println( suporte.getStatus() );
J
java_coffe:
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 ....

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());
        }
peczenyj

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.

J
peczenyj:
Polimorfismo?
public static void incluirTecnico(Tecnico tecnico) {  
   // ...
}

public static void incluirTecnico(Suporte suporte) {  
  // ...
                  System.out.println(suporte.getStatus();)
}
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.

I

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 ???

I
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:
I
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 ....

I

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 !!! :frowning:

Ja to querendo uma forma boa de fazer isso para nao me preucupar futuramente com alterações …

I

Alguem pode dar uma dica !? :?: :shock:

Criado 2 de fevereiro de 2008
Ultima resposta 7 de fev. de 2008
Respostas 10
Participantes 5