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