Duvida sobre casting de referencias

4 respostas
danielbussade

Olá a todos do Forum, dêm uma olhada neste código:

public class Conta {
                private int numero;

              public void setNumero(int numero) {
		 this.numero = numero;
	}

             public int getNumero(int numero) {
		 return this.numero;
	}
            

               public boolean equals(Object obj) {            //A dúvida está aqui
		ContaCorrente c=(ContaCorrente) obj;
		if( (this.numero ==c.numero() ) 
			return true;
		else
			return false;
	}
	
}      

public class Principal {
	public static void main(String[] args) {
		ContaCorrente cc= new ContaCorrente ();
		ContaCorrente cc1= new ContaCorrente ();
		
		cc.setNumero(10);
		cc1.setNumero(10);
		
		if(cc.equals(cc1))
			System.out.println("são iguais");
		else
			System.out.println("São diferentes");
		

	}
}
A minha dúvida é a seguinte, eu rescreevi o metodo equals da classe Conta, para comparar os números das Contas. Mas porque que na passagem de parâmetro eu não precisei de um casting de referência, ou seja transforma de Object para Conta, e dentro do método eu preciso transforma de Object, para Conta com o casting? O java converte automaticamente ?

Se alguém puder me dar uma explicação melhor, sobre casting de referências, eu agradeço.

Att

4 Respostas

alanclic

Isso é um lance de hierarquia.

Todo objeto Conta é garantido ser um Object.

Mas nem todo Object é garantido ser um objeto Conta, por isso que você precisa de um cast.

Espero ter ajudado!

Bravox

Por defualt todas as as classe em java são subclasse da Classe Object então sua Classe Conta é um Object portanto não a necessidade de fazer o cast de Conta para Object agora um Object não é uma Conta então a necessidade de fazer o cast

peczenyj

Uma pequena sugestão didatica:

public boolean equals(Object obj) {            
	boolean value;

	// vc pode receber um objeto nulo
	if (obj == null){ 
		value = false;
	// vc pode receber outro objeto
	} else if ( ! obj instanceof ContaCorrente){ 
		value = false;
	// se for um obj dos bons... 	
	} else { 
		ContaCorrente c=(ContaCorrente) obj;   
		value =  ( this.numero == c.numero() );
	}
	// acho que esta bem claro, qualquer dúvida dê um grito.
	return value;
}

Depois de uma olhada aqui:
http://www.javapractices.com/Topic17.cjp

danielbussade

Obrigado a todos, agora ficou melhor a compreensão fazendo uma analogia consegui visualizar melhor, tipo se eu tenho uma class Programador, e subclasses ProgramadorPascal, ProgramadorDelphi, ProgramadorJava, etc…
Obrigatoriamente um ProgramadorPascal é um Programador, por isso nao preciso do Cast, mas nem sempre um programador é um programador ProgramadorPascal neste caso preciso do cast.

Att

Criado 19 de outubro de 2007
Ultima resposta 19 de out. de 2007
Respostas 4
Participantes 4