[quote=guj1]ela já foi criada por mim e é Observer mesmo.
Casting? poderia explicar melhor?[/quote]
Bom eu sou iniciante, mas, Cast, Casting, Downcast, Upcast, são tudo parecido, eles “moldam” um valor, ou objeto, para assumir um outro tipo. Ex:
Double nDouble = valorDouble;
int nInt = nDouble;
Não é possível porque tipo Double é maior que int, porém, posso “forçar”, com perdas ou não (depende do valor “exato” do nDouble), o nDouble a caber no int, ex:
Double nDouble = valorDouble;
int nInt = (int) nDouble;
O mesmo pode ser feito com objetos. Algo bem ligado a polimorfismo… Imagine, vc usa uma classe pai como tipo de uma variável de referência e atribui a ela o endereço de uma classe filha desta classe pai:
ClassePai pai = new ClasseFilha();
Dessa forma a variável de referência, pai, só pode usar os métodos da ClassePai, mesmo “tendo” como objeto real uma ClasseFilha.
Em algum momento vc poderia necessitar dos métodos específicos da ClasseFilha então vc poderia fazer:
ClassePai pai = new ClasseFilha();
...
ClasseFilha filha = (ClasseFilha) pai;
Ou seja, esta variável, filha, agora possui uma referência de pai “convertida” (observe as aspas) em filha…
Não sei se usei os termos corretos, mas acho que é por ai a questão de Castings… Moderadores, corrijam-me.
Hunnn Entendi, coerção de tipo, castings. Lembrei o que era mas não sabia que poderia ser usada em objetos.
Mas no exemplo que eu dei, existe um ponto, para acessar o método get do objeto observers. Nesse caso ele faz o casting e chama o método simultaneamente?
vou te dar um exemplo simples, quando vc utiliza o cast para ‘garantir’ se eu posso falar a grosso modo que aquela instancia pertence a classe Observer, o ponto logo em seguida chama
o metodo dessa classe, ou seja, é como se vc tivesse criado um objeto normal, e chamando o metodo normalmente, mas nesse caso vc utilizou de um polimorfismo, usando duas classes e definindo (cast) que a instancia é de uma classe filha. Me corrijam se eu errei.
De modo simples respondendo sua pergunta: SIM chama simultaneamente porque o cast está definindo aquele obj para a classe.
Um abraço!!!
Antes de mais nada quero esclarecer alguns pontos, na minha propensa “afirmação”:
Existe um porém, realmente quando se usa uma referência tipo ClassePai mas o objeto a que ela se refere é alguma classe filha, vc poderá usar apenas aqueles métodos “registrados” na classe pai, o porém é que se a classe filha sobrescreveu (sobrescreveu e não sobrecarregou) um método da classe pai, no exemplo que citei, primeiro a jvm irá procurar o método na classe real da referência ( classe filha), ou seja, a jvm irá executar o método da classe filha, e ai é que se encontra o polimorfismo, usar uma referência genérica (ClassePai) para acessar tipos mais “específicos”.
Outro porém, quando cito ClassePai, na verdade também, e é melhor, posso me referir a, Classe mãe, Classe base ou classe raiz(dependendo da situação), Progenitora, Super classe, e quando escrevo Classe filha, também pode ser subclasse, classe folha(dependendo da situação)…
Quanto a sua dúvida, eu acredito que, pelos seus comentários, é necessário você conhecer mais a respeito de Orientação a Objetos. No livro: Padrões de Projetos de Erich Gama e outros, eles definem logo no início que se você precisar de dicionário quando se fala de herança pela diferença, herança para substituição, etc, o livro não será tão útil.
Meu conselho, procure criar você mesmo um teste, sem copiar, que possa verificar a sua dúvida:
Se conseguir, você esclarece a sua dúvida e reafirma os conceitos que vc aprendeu. Se não conseguir, é melhor rever alguns assuntos, principalmente OO, e é claro, pode contar comigo.
herança pela diferença e pela substituição, eu comecei a estudar pelas apostilas de Caelum. Mas eu gostaria que vocês me indicasse uma referência que fala especificamente desse assunto que eu nunca ouvi falar isso. Alguma dica?
Obrigado meus caros.
Abraço!
Realmente preciso reforçar meus conhecimentos de OO. E já estou a todo vapor.