Criacao de objetos

Olá, Tenho uma duvida basica sobre java.


class exemplo0901 extends Jframe 
{ 
       exemplo0901() 
       { 
           setTitle("minha primeira . .."); 
           setSize(400,50); 

            ...... 
       } 

       public static void main(String args[]) 
       { 
           Jframe Janela=new Exemplo0901(); 
           Janela.show(); 

             ........ 

       } 

 

Na declaracao e inicializacao do objeto janela " Jframe Janela=new Exemplo0901();" Poderia ser deste jeito tambem:

Exemplo0901 Janela=new Exemplo0901();  ?? 

Existe alguma diferença entre esses dois metodos de criar um objeto?
Alguem poderia me explicar em detalhes.

Esse exemplo se trata de polimorfismo
Um objeto possui uma única forma entretanto uma variável de referencia pode se referir a objetos de diferentes formas

No momento que vc criou o objeto janela:

Jframe Janela=new Exemplo0901();

Isso foi possivel prq Exemplo0901(); extendeu de JFrame(conceito de herança , vc herdou todos os metodos da classe JFrame) mas objeto janela é do tipo JFrame , como disse acima um objeto possui somente uma forma

Vamos supor que na classe Exemplo901() possui o metodo :

public String getJanela()
{

  return "Janela";
}

Se vc tentasse acessar esse objeto dessa forma:

Jframe Janela=new Exemplo0901();
janela.getJanela();

Daria erro prq objeto janela é do tipo JFrame e classe JFrame nao possui metodo getJanela()

Vc teria que fazer um cast para acessar o metodo getJanela()

((Exemplo0901)janela).getJanela()

Outro modo:

 Exemplo0901 Janela=new Exemplo0901();

Agora janela é do Tipo Exemplo0901 e vc nao precisaria de um Cast para acessar o metodo getJanela() entretanto vc conseguiria acessar os metodos da classe JFrame como .setVisible() prq vc extendeu de JFrame

Cast para cima da hierarquia é feito implicitamente pelo compilador
Cast para baixo deve ser para uma subclasse e tempo de execução será verificado pelo compilador Ex:

((Exemplo0901)janela).getJanela()

Poderia ser feito sim. E, no caso do JFrame, não há muito prejuízo em fazer isso.

Dá uma lida nesse tópico onde eu explico em detalhes quando e, principalmente, para quê usar a declaração do jeito que você fez originalmente.