Ei, nada de poluir o tópico! 2008/9/22 Zaedy Sayão <[EMAIL PROTECTED]>
> Verdade, Buss anda bem quieto. > > Ando ate estranhando. > Deve ta preparando uma bomba pra gente....xD > > []s > > 2008/9/22 Flavio Costa <[EMAIL PROTECTED]> > >> Buss anda meio calado ultimamente, estamos precisando de polêmicas =P >> >> >> 2008/9/22 Miguel Jonathan <[EMAIL PROTECTED]> >> >>> O Peter explicou bem a idéia, vamos reforçar alguns pontos: >>> >>> >>> Uma referência de um determinado tipo (ex: Pessoa) pode apontar para >>> qualquer objeto que seja da classe Pessoa ou de alguma subclasse dela (ex: >>> Aluno, Professor): >>> Pessoa p1 = new Pessoa(); >>> Pessoa p2 = new Aluno(); >>> Pessoa p3 = new Professor(); >>> >>> E, em tempo de execução, podemos fazer qualquer dessas variaveis passar a >>> apontar para outro objeto, desde que seja Pessoa ou subclasse dela: >>> Ex: p2 = p1; // etc. >>> >>> A única coisa que podemos garantir, a qualquer tempo, quando enviamos uma >>> mensagem a um objeto através de uma referência do tipo Pessoa, é que esse >>> objeto é capaz de responder ao protocolo de Pessoa. >>> Não podemos fazer algo como: >>> p2.getDre(); >>> Porque nada nos garante que p2 estará apontando sempre para um Aluno. >>> >>> Mas sempre poderemos fazer, com a certeza de que funcionará, algo assim: >>> p2.getNome(); >>> Porque getNome() é um método definido em Pessoa, portanto herdado ou >>> modificado nas subclasses. >>> >>> Alguém dirá: mas EU SEI que no meu programa, na hora que eu for fazer >>> p2.getDre(), p2 estará apontando para um Aluno, porque fui eu quem fiz isso >>> em uma linha anterior. Porque não compila? >>> >>> A resposta é que o compilador não faz uma análise do seu código para >>> checar isso, senão a compilação levaria séculos. Mas ele aceita que você >>> diga: "Pode compilar, que eu garanto que vai funcionar". Para dizer isso ao >>> compilador, você precisa fazer uma coerção do tipo da referência (ou >>> casting, em inglês): >>> ( (Aluno)p2).getDre(); >>> ou, se preferir mais clareza: >>> Aluno alu = (Aluno) p2; >>> alu.getDre(); >>> Aí o compilador não reclama mais. >>> >>> Com interfaces, ocorre uma situação similar. >>> Assuma que Pessoa implementa a interface Comparable<Pessoa>. Nesse caso, >>> é como se Pessoa (e, por extensão, também Aluno e Professor) também >>> herdassem o método dessa interface. Na realidade Pessoa apenas herda a >>> obrigação de implementar esse método, mas na prática isso significa que >>> podemos garantir que Profesor, Aluno, e Data sempre responderão à mensagem >>> compareTo(Pessoa p). >>> Podemos fazer então: >>> Comparable<Pessoa> comp1 = new Aluno(); >>> Comparable<Pessoa> comp2 = new Professor(); >>> >>> A única coisa que podemos garantir de uma variável tipo >>> Comparable<Pessoa> é que ela pode apontar para objetos que a implementam, >>> mais nada. >>> >>> Portanto, escrever comp1.getDre() dará erro de compilação, porque nada >>> impede que você tenha feito antes: >>> comp1 = comp2; >>> e, nesse caso, comp1 agora estaria apontando para um Professor, que não >>> sabe o que é getDre() ! >>> >>> Mas sempre poderemos escrever: >>> Pessoa p = new Pessoa(.....); >>> comp1.compareTo(p); >>> >>> É isso aí... >>> >>> Jonathan >>> >>> >>> 2008/9/22 Zaedy Sayão <[EMAIL PROTECTED]> >>> >>> Eu cansei de falar isso na monitoria de hj.... >>>> Eh bom q vc nao tenha ido, senao eu vou te matar...xD >>>> >>>> Mas isso eh meio complicado por email. >>>> Se me achar amanha antes do teste te explico pessoalmente... >>>> >>>> []s >>>> >>>> 2008/9/22 Peter <[EMAIL PROTECTED]> >>>> >>>> Vou me aventurar... vamos ver se consigo ajudar: >>>>> >>>>> Imagine uma variável do tipo int. >>>>> Ele só pode apontar para valores tipo int. >>>>> Logo, só vai poder participar de operações que estejam definidas para o >>>>> tipo int. >>>>> Quando definimos uma classe ou uma interface, estamos definindo um tipo >>>>> também. >>>>> >>>>> Uma variável de um tipo de uma interface só pode participar de >>>>> operações válidas para aquela interface, ou seja, vc só vai conseguir >>>>> chamar >>>>> os métodos declarados naquela interface (ou numa interface da qual ela >>>>> tenha >>>>> herdado). >>>>> Isso pq esta variável estará apontando para uma classe qualquer da qual >>>>> a única coisa que vc pode garantir é que ela implementa aqueles métodos. >>>>> Logo, vc só poderá chamar aqueles métodos, independe da classe da >>>>> instância >>>>> apontada por aquela referência. >>>>> >>>>> O mesmo serve para classes abstratas E concretas. Se uma referência de >>>>> um tipo de uma classe X aponta para uma instância de uma subclasse Y, vc >>>>> só >>>>> poderá chamar métodos da classe X e das superclasses dela, não conseguirá >>>>> acessar os métodos exclusivos da subclasse Y. >>>>> >>>>> Isto garante tipagem da linguagem. Java é uma linguagem fortemente >>>>> tipada. >>>>> >>>>> Espero ter conseguido ajudar. Se vc tiver dúvidas, pode me ligar até >>>>> 21:00 ou aparecer no msn, icq, google talk, skype, sinal de fumaça, etc, >>>>> etc... >>>>> >>>>> Abraço! >>>>> >>>>> Peter P. Lupo >>>>> Undergraduating in Computer Science DCC/UFRJ >>>>> Sun Certified Java Associatehttp://pplupo.googlepages.com/ >>>>> Cell. +55 (21) 81742487 >>>>> >>>>> >>>>> >>>>> Flavio Costa wrote: >>>>> >>>>> Meio dificil explicar isso via e-mail. >>>>> Acho que essa dúvida deveria ser sanada pessoalmente com os monitores >>>>> ou o professor. >>>>> >>>>> 2008/9/22 FernandoKling <[EMAIL PROTECTED]> >>>>> >>>>>> >>>>>> se eu entendi bem, a dúvida do gustavo é em relaçao à variaveis cujo >>>>>> tipo sao interfaces ou classes abstratas >>>>>> tipo o trecho de código q tinha no teste 1: >>>>>> M x = new A(); >>>>>> onde M podia ser uma interface... >>>>>> >>>>>> On 22 set, 19:27, Gustavo Cury <[EMAIL PROTECTED]> wrote: >>>>>> > Sobre esta dúvida: "Uso correto de variáveis do tipo de uma >>>>>> interface ou do tipo de uma classe abstrata" >>>>>> > Está na pagina do professor, fui olhando os tópicos e quando chegou >>>>>> nesse, não entendi. >>>>>> > Gustavo Cury >>>>>> > >>>>>> >>>>>> >>>>>> >>>>> >>>>> >>>>> -- >>>>> Flávio Coutinho da Costa >>>>> >>>>> >>>>> >>>>> >>>>> >>>> >>>> >>>> -- >>>> Zaedy Dantas Sayão >>>> Graduando em Ciência da Computação DCC/UFRJ >>>> http://www.manufato.com.br/ >>>> MSN: [EMAIL PROTECTED] >>>> >>>> >>>> >>> >>> >>> >> >> >> -- >> Flávio Coutinho da Costa >> >> >> > > > -- > Zaedy Dantas Sayão > Graduando em Ciência da Computação DCC/UFRJ > http://www.manufato.com.br/ > MSN: [EMAIL PROTECTED] > > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Comp 2 - Geral" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/comp2-geral?hl=en -~----------~----~----~----~------~----~------~--~---
