Re:diagrama de classe duvida

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 !! :cry: [/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():wink:
}[/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():wink:
}[/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 !! :cry: [/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 !!! :frowning:

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

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