Dúvida herança: Declaração e instanciação de objeto  XML
Índice dos Fóruns » Java Básico
Autor Mensagem
rafaspimenta
HelloWorld

Membro desde: 21/07/2011 18:22:16
Mensagens: 11
Offline

Bom dia Colegas,

Tenho duas classe: ClassePai e ClasseFilha herdando de ClassePai.
Gostaria de saber se existe diferença entre:

1. Declarar um objeto do tipo ClassePai e instancia-lo com a ClasseFilha.
2. Declarar um objeto como sendo da classeFilha e instancia-lo como ClasseFilha.


Obrigado,

This message was edited 1 time. Last update was at 05/02/2012 09:48:30

ironmarq
Debugger
[Avatar]

Membro desde: 25/07/2011 20:43:02
Mensagens: 64
Localização: Campinas/SP
Offline

Bom dia rafaspimenta,
1. Declarar um objeto do tipo ClassePai e instancia-lo com a ClasseFilha.

Se ClasseFilha estender ClassePai, sem problemas
2. Declarar um objeto como sendo da classeFilha e instancia-lo como ClasseFilha.

Neste caso sim, mas acho que vc quis dizer se criar uma referência da classe filha e instanciá-la como pai, não é isso? Se sim, o compilador deixa passar, pois observa na árvore de hierarquias e vê que possue uma descendência, PORÉM, terá um erro em tempo de execução, será lançada uma exceção ClassCastException ...

Marcos P Alves

" Simple Man "
------------------------------
[MSN] [ICQ]
rmendes08
GUJ Master
[Avatar]

Membro desde: 29/05/2008 14:09:28
Mensagens: 1617
Online

Na prática, faz toda a diferença na maneira que você usa o objeto. Por exemplo:



o que o exemplo mostra é que você pode referenciar um objeto da classe filha por uma variavel do tipo pai, porém, você só consegue executar os métodos da classe pai nesse caso.

"A Técnica é transformada em Arte por quem a emprega"

"O futuro pertence àqueles que acreditam na beleza de seus sonhos"

Computadores Fazem Arte

http://www.uaijug.com.br

"É importante estabelecer uma estrutura de alto nível, mas isso não significa criar uma infinidade de diagramas de classes detalhados."
Vingdel
JavaEvangelist
[Avatar]

Membro desde: 19/11/2006 22:09:57
Mensagens: 358
Localização: Cabo Frio - RJ
Offline

Olá, rmendes08!
Isso eu tenho que entender também, então não tem diferença entre esse dois caso?



Mas e se, no primeiro caso, o construtor da classe Filha (afinal ele é o responsável pela no instância), por acaso, fizer uso de um método da classe Filha, vai dar PAAAAAAUUUU?

Abraço!

This message was edited 1 time. Last update was at 05/02/2012 11:15:57


  • Caso tua dúvida esteja sanada edite tua primeira postagem no tópico e adicione [RESOLVIDO] ao assunto.
  • Poste teu código entre as tags [code] ... [/code].



  • rafaspimenta
    HelloWorld

    Membro desde: 21/07/2011 18:22:16
    Mensagens: 11
    Offline

    ironmarq wrote:...acho que vc quis dizer se criar uma referência da classe filha e instanciá-la como pai, não é isso?

    Se eu tentar criar uma ref. da classe Filha e instancia-la como Pai, dá o seguinte erro:
    acho que para fazer isso teria que ser através de cast.

    Continuando, fiz os seguinte teste:

    Bom, sinceramente n entendi pq o compilador levantou essa excessão.
    Achava que por ter instanciado meu objeto pf como Filha, teria acesso a todos métodos da mesma. Alguém pode me explicar?

    This message was edited 1 time. Last update was at 06/02/2012 09:29:40

    rmendes08
    GUJ Master
    [Avatar]

    Membro desde: 29/05/2008 14:09:28
    Mensagens: 1617
    Online

    Vingdel wrote:Olá, rmendes08!
    Isso eu tenho que entender também, então não tem diferença entre esse dois caso?



    Mas e se, no primeiro caso, o construtor da classe Filha (afinal ele é o responsável pela no instância), por acaso, fizer uso de um método da classe Filha, vai dar PAAAAAAUUUU?

    Abraço!


    Não, vai funcionar perfeitamente porque o construtor da classe pode acessar qualquer método/membro da classe, seja ele static ou não.

    "A Técnica é transformada em Arte por quem a emprega"

    "O futuro pertence àqueles que acreditam na beleza de seus sonhos"

    Computadores Fazem Arte

    http://www.uaijug.com.br

    "É importante estabelecer uma estrutura de alto nível, mas isso não significa criar uma infinidade de diagramas de classes detalhados."
    rmendes08
    GUJ Master
    [Avatar]

    Membro desde: 29/05/2008 14:09:28
    Mensagens: 1617
    Online

    rafaspimenta wrote:
    ironmarq wrote:...acho que vc quis dizer se criar uma referência da classe filha e instanciá-la como pai, não é isso?

    Se eu tentar criar uma ref. da classe Filha e instancia-la como Pai, dá o seguinte erro:
    acho que para fazer isso teria que ser através de cast.

    Continuando, fiz os seguinte teste:

    Bom, sinceramente n entendi pq o compilador levantou essa excessão.
    Achava que por ter instanciado meu objeto pf como Filha, teria acesso a todos métodos da mesma. Alguém pode me explicar?


    Não. O que define o acesso a um método/membro é o tipo da variável, e não o tipo da instância. O tipo da instância por sua vez define a implementação do método que será invocada. À primeira vista isso é uma limitação, mas na prática, aí é que está a mágica do polimorfismo. O fato de você acessar os método de um objeto pelo tipo da variável e não pela implementação permite que você escreva métodos em termos de um contrato de interface sem antes mesmo ter uma classe que a implementa. Um exemplo prático é o JDBC. Praticamente, tudo no JDBC são interfaces e você as usa em termos genéricos. Assim, você pode escrever um programa todo que usa acesso a dados sem se preocupar com as peculiaridades de cada um.

    "A Técnica é transformada em Arte por quem a emprega"

    "O futuro pertence àqueles que acreditam na beleza de seus sonhos"

    Computadores Fazem Arte

    http://www.uaijug.com.br

    "É importante estabelecer uma estrutura de alto nível, mas isso não significa criar uma infinidade de diagramas de classes detalhados."
     
    Índice dos Fóruns » Java Básico
    Ir para:   
    Powered by JForum 2.1.8 © JForum Team