Java Métodos Construtores Sobrecarga Sobrescrita

Java Métodos Construtores Sobrecarga Sobrescrita. Linguagem Java. Sumário: Implementação de Métodos, Assinatura de um método, Sobrecarga(Overloading) de Métodos, Varargs, This, Sobrecarga de Construtores,Como invocar um Construtor dentro de outro Construtor da mesma classe,Como invocar Construtores da SuperClass,super, super(),Como invocar métodos da SuperClasse,Sobrescrita de Métodos.

Implementação de métodos:

Todo bloco de código de um método é considerado a implementação dele, vejamos o exemplo:

public void metodo( ){

//bloco de codigo

}

public void metodo2( ){
int variavel = 0;

//bloco de codigo
}

Logo acima temos 2 métodos com implementações de código diferente.

Assinatura de um método:

Quando você declara um método, você cria a assinatura do método, vejamos o exemplo:

<p>
  </span></span></span><span style="color: rgb(0, 0, 0);font-family:arial;font-size:100%;">public void <span style="font-weight: bold;">metodo</span>( ){</p> 

  <p>
    //bloco de codigo
  </p>

  <p>
    }
  </p>

  <p>
    A assinatura do método é: </span><span style="color: rgb(0, 0, 0);font-family:arial;font-size:100%;">public void <span style="font-weight: bold;">metodo</span>( )</span> <span style="font-weight: bold; color: rgb(0, 0, 0);font-family:arial;font-size:180%;"></p> 

    <h2>
      ava Métodos Construtores Sobrecarga Sobrescrita
    </h2>

    <p>
      Sobrecarga(Overloading) de Métodos:</span><span style="color: rgb(0, 0, 0);font-family:arial;font-size:100%;"></p> 

      <p>
        Um método é considerado Sobrecarregado quando temos mais de um método com o mesmo identificador e ARGUMENTOS diferentes em (Quantidade, Ordem ou Tipo). Podemos escolher o uso de overload também para trabalhar com diferentes tipos de dados sobre o mesmo membro ou mesmo o quesito de mesmo identificador e diferente assinatura.
      </p>

      <p>
        <span style="font-weight: bold;font-size:130%;">Vejamos exemplos de overload:</p> 

        <p>
          </span><br /><span style="font-weight: bold;font-size:100%;">Assinatura de métodos:</span>
        </p>

        <p>
          public void metodo(int argumento)<br />public void metodo(byte argumento)<br />public void metodo(short argumento)
        </p>

        <p>
          Perceba que eles tem o mesmo identificador, nesse caso &#8211; metodo &#8211; e tem argumentos diferente.<br />Na invocação do método, o compilador t<span style="font-weight: bold;">estará os parametros e escolherá de acordo com Parametros e argumentos dos métodos</span>, a TIPAGEM(tipos de dados em java) de java agora sim é muito mais que util.
        </p>

        <p>
          <span style="font-weight: bold;font-size:130%;">Oque realmente caracteriza métodos Overload?</span>
        </p>

        <p>
          <span style="font-size:100%;">&#8211; A lista de argumentos </span><span style="font-weight: bold;font-size:100%;">entre os método deve SER DIFERENTE isso é regra básica, se tiver o mesmo identificador e lista de Argumentos diferentes em: ORDEM e/ou TIPO e/ou QUANTIDADE, isso ja caracteriza OVERLOAD.</p> 

          <p>
            &#8211; O tipo de retorno pode ser diferente, SE OS MÉTODOS TIVEREM MESMO IDENTIFICADOR e lista de argumento diferentes em </span></span><span style="color: rgb(0, 0, 0);font-family:arial;font-size:100%;"><span style="font-weight: bold;">ORDEM e/ou TIPO e/ou QUANTIDADE e ainda tiverem tipo de retorno diferente, isso é considerado ainda OVERLOAD.</span></span> <span style="color: rgb(0, 0, 0);font-family:arial;font-size:100%;"></p> 

            <p>
              <span style="font-weight: bold;font-size:180%;">Varargs:<br /><span style="font-weight: bold;"><span style="font-size:100%;"><br />Lembra-se do recurso de varargs?</p> 

              <p>
                </span></span></span><span style="font-size:100%;"><span style="font-size:100%;">[modificador_de_acesso] tipo_retorno identificador</span></span><span style="font-weight: bold;font-size:100%;"><span style="font-weight: bold;"><span style="font-size:100%;">( tipo   identificador )</p> 

                <p>
                  </span></span></span><span style="font-size:100%;"><span style="font-size:100%;">Pois bem, ele é a mesma coisa que um overload contínuo de mesmo tipo, <span style="font-weight: bold;">vejamos</span>:</p> 

                  <p>
                    public void metodo(<span style="font-weight: bold;">byte variavel)</span><br />public void metodo(<span style="font-weight: bold;">byte variavel,byte variavel2</span>)<br /></span></span></span><span style="color: rgb(0, 0, 0);font-family:arial;font-size:100%;"><span style="font-size:100%;"><span style="font-size:100%;">public void metodo(<span style="font-weight: bold;">byte variavel,byte variavel2, byte variavel3</span>)</span></span><span style="font-weight: bold;font-size:100%;"><span style="font-weight: bold;"><span style="font-size:100%;"></p> 

                    <p>
                      Ao invez disso podemos usar:<br /></span></span></span><span style="font-size:100%;"><span style="font-size:100%;"><br /></span></span></span><span style="color: rgb(0, 0, 0);font-family:arial;font-size:100%;"><span style="font-size:100%;"><span style="font-size:100%;">public void metodo(<span style="font-weight: bold;">byte   variavel</span>)<br />Sendo assim podemos aceitar quantos parametros forem passados,<span style="font-weight: bold;"> independente da quantidade</p> 

                      <p>
                        <span style="font-size:180%;">This:</span></span><span><span style="font-size:100%;"><span style="font-size:100%;"></p> 

                        <p>
                          <span style="font-weight: bold;">Basicamente ele :</span><br />*Resolve Ambiguidade<br />*Passar o objeto atual como Parametro<br />*Invocar um construtor da mesma classe
                        </p>

                        <p>
                          O this basicamente nada mais é doque a <span style="font-weight: bold;">posição 0 da local variable</span>, so que estamos usando explicitamente ele agora.<br />Quando você estiver trabalhando com instancias, é a mesma coisa que dizer, ESSE OBJETO, essa INSTANCIA QUE ESTOU AGORA.<br /></span></span></span><span style="font-weight: bold;"></p> 

                          <p>
                            Resolvendo ambiguidade:</span><span></p> 

                            <p>
                              public class <span style="font-weight: bold;">Pessoa</span>{<br />private int idade;
                            </p>

                            <p>
                              public void setIdade(int <span style="font-weight: bold;">idade</span>){<br /><span style="font-weight: bold;">this.idade</span> = <span style="font-weight: bold;">idade</span>;
                            </p>

                            <p>
                              }
                            </p>

                            <p>
                              }
                            </p>

                            <p>
                              <span style="font-weight: bold;">Em sintax bytecode temos no Frame setIdade:</span><br />public void setIdade(int);<br />Code:<br />0: aload_0<br />1: iload_1<br />2: putfield #2; //Field idade:I<br />5: return
                            </p>

                            <p>
                              <span style="font-weight: bold;">*aload_0 &#8211; > É uma referência a Constant Pool do Class File, que futuramente será a Runtime Constant Pool e com dynamic linking, será HEAP</span>
                            </p>

                            <p>
                              }
                            </p>

                            <p>
                              </span></span></span></span><a style="color: rgb(0, 0, 0); font-family: arial;" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_CdmD2AaXIBs/SqbCUK4Yz9I/AAAAAAAAAYE/spJ8C8hzwMU/s1600-h/this.png"><img style="cursor: pointer; width: 278px; height: 320px;" src="http://localhost/www/wp0/uploads/this.png" alt="Exemplos Java,Linguagem Java, Programação, Java" id="BLOGGER_PHOTO_ID_5379200456714670034" border="0" /></a> <span style="font-weight: bold; color: rgb(0, 0, 0);font-family:arial;"></p> 

                              <p>
                                Clique na imagem para ampliar</span><span style="color: rgb(0, 0, 0);font-family:arial;">, nesse caso o int é </span><span style="color: rgb(0, 0, 0);font-family:arial;font-size:100%;"><span style="font-size:100%;"><span style="font-size:100%;"><span>(int <span style="font-weight: bold;">idade</span>), lembra-se que todo argumento é variavel local ao Frame? Pois bem, Quando os parametros forem passados ao frame <span style="font-weight: bold;">setIdade</span> serão armazenados como variável local ao frame, que nesse é a posição 1 da local variable.</span></span></span></span> <span style="color: rgb(0, 0, 0);font-family:arial;font-size:100%;"><span style="font-size:100%;"><span style="font-size:100%;"><span><br /><span style="font-weight: bold;"></p> 

                                <p>
                                  Agora sem o this:
                                </p>

                                <p>
                                  </span>public class <span style="font-weight: bold;">Pessoa</span>{<br />private int <span style="font-weight: bold;">idade</span>;
                                </p>

                                <p>
                                  public void setIdade(int <span style="font-weight: bold;">idade</span>){<br /><span style="font-weight: bold;">idade</span> = <span style="font-weight: bold;">idade</span>;
                                </p>

                                <p>
                                  }
                                </p>

                                <p>
                                  }
                                </p>

                                <p>
                                  </span></span></span></span><span style="color: rgb(0, 0, 0);font-family:arial;font-size:100%;"><span style="font-size:100%;"><span style="font-size:100%;"><span><span style="font-weight: bold;">Em sintax bytecode temos no Frame setIdade:</span></span></span></span></span><span style="color: rgb(0, 0, 0);font-family:arial;"> </span><span style="color: rgb(0, 0, 0);font-family:arial;font-size:100%;"><span style="font-size:100%;"><span style="font-size:100%;"><span>public void setIdade(int);<br />Code:<br />0: iload_1<br />1: istore_1<br />2: return</p> 

                                  <p>
                                    }</span><span style="font-weight: bold;"></p> 

                                    <p>
                                      </span></span></span></span><a style="color: rgb(0, 0, 0); font-family: arial;" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_CdmD2AaXIBs/SqbCYvliUgI/AAAAAAAAAYM/cbbd6tLNSUE/s1600-h/this2.png"><img style="cursor: pointer; width: 278px; height: 320px;" src="http://localhost/www/wp0/uploads/this2.png" alt="Exemplos Java,Linguagem Java, Programação, Java" id="BLOGGER_PHOTO_ID_5379200535287190018" border="0" /></a>
                                    </p>

                                    <p>
                                      <span style="font-weight: bold; color: rgb(0, 0, 0);font-family:arial;">Clique na imagem para ampliar</span><span style="color: rgb(0, 0, 0);font-family:arial;"> nesse caso o int é </span><span style="color: rgb(0, 0, 0);font-family:arial;font-size:100%;"><span style="font-size:100%;"><span style="font-size:100%;"><span>(int <span style="font-weight: bold;">idade</span>), lembra-se que todo argumento é variavel local ao Frame? Pois bem, Quando os parametros forem passados ao frame <span style="font-weight: bold;">setIdade</span> serão armazenados como variável local ao frame</span></span></span></span><span style="color: rgb(0, 0, 0);font-family:arial;font-size:100%;"><span style="font-size:100%;"><span style="font-size:100%;"><span>, que nesse é a posição 1 da local variable.</span></span></span></span> <span style="color: rgb(0, 0, 0);font-family:arial;font-size:100%;"><span style="font-size:100%;"><span style="font-size:100%;"><span style="font-weight: bold;"></p> 

                                      <p>
                                        <span style="font-size:130%;">Passar o objeto atual:</span></span><span><span style="font-size:100%;"><span style="font-size:100%;"></p> 

                                        <p>
                                          public class <span style="font-weight: bold;">Pessoa</span>{
                                        </p>

                                        <p>
                                          public void <span style="font-weight: bold;">setIdade</span>(){<br /><span style="font-weight: bold;">setIdade2</span>(<span style="font-weight: bold;">this</span>);
                                        </p>

                                        <p>
                                          }
                                        </p>

                                        <p>
                                          public void setIdade2(<span style="font-weight: bold;">Pessoa pessoa</span>){
                                        </p>

                                        <p>
                                          }
                                        </p>

                                        <p>
                                          public static void <span style="font-weight: bold;">main</span>(String array[]){<br />Pessoa my = new Pessoa();<br />my.<span style="font-weight: bold;">setIdade</span>();
                                        </p>

                                        <p>
                                          }
                                        </p>

                                        <p>
                                          }
                                        </p>

                                        <p>
                                          <span style="font-weight: bold;">Vejamos essa instrução:</span>
                                        </p>

                                        <p>
                                          </span></span></span></span></span></span><span style="color: rgb(0, 0, 0);font-family:arial;font-size:100%;"><span style="font-size:100%;"><span style="font-size:100%;"><span><span style="font-size:100%;"><span style="font-size:100%;"><span style="font-weight: bold;">setIdade2</span>(<span style="font-weight: bold;">this</span>);</span></span></span></span></span></span> <span style="color: rgb(0, 0, 0);font-family:arial;font-size:100%;"><span style="font-size:100%;"><span style="font-size:100%;"><span><span style="font-size:100%;"><span style="font-size:100%;"></p> 

                                          <p>
                                            Basicamente aqui eu digo, pega o endereço de memória do OBJETO Que estou no momento e passa como parametros aos argumentos de </span></span></span></span></span></span><span style="color: rgb(0, 0, 0);font-family:arial;font-size:100%;"><span style="font-size:100%;"><span style="font-size:100%;"><span><span style="font-size:100%;"><span style="font-size:100%;">setIdade2(<span style="font-weight: bold;">Pessoa pessoa</span>).</span></span></span></span></span></span> <span style="color: rgb(0, 0, 0);font-family:arial;font-size:100%;"><span style="font-size:100%;"><span style="font-size:100%;"><span style="font-weight: bold;"></p> 

                                            <p>
                                              <span style="font-size:180%;">Sobrecarga de Construtores:<br /></span></span><span><span style="font-size:100%;"><span style="font-size:100%;"><br />Existe uma maneira a qual você pode construir seus objetos de acordo com os dados iniciais passados, As vezes em cadastro como exemplo não temos todos os dados em exato momento e esses dados não são tão importantes para a construção daquele objeto em si. <span style="font-weight: bold;"></p> 

                                              <p>
                                                Vejamos exemplo:</span>
                                              </p>

                                              <p>
                                                Em uma loja virtual ao se cadastrar coloca-se alguns dados. Temos 2 participantes jose e maria, maria não sabe o numero da casa dela, mais não é tao importante nesse caso porem seria bom se tivesse. <span style="font-weight: bold;">Vejamos em código:<br /></span><br />public class <span style="font-weight: bold;">Pessoa</span>{
                                              </p>

                                              <p>
                                                private String name;<br />private String endereco;<br />private int numeroCasa;
                                              </p>

                                              <p>
                                                public Pessoa(String <span style="font-weight: bold;">name</span>,String <span style="font-weight: bold;">endereco</span>,int <span style="font-weight: bold;">numeroCasa</span>){ //jose invoca esse construtor<br />this.name = name;<br />this.endereco = endereco;<br />this.numeroCasa = numeroCasa;
                                              </p>

                                              <p>
                                                }
                                              </p>

                                              <p>
                                                public Pessoa(String <span style="font-weight: bold;">name</span>,String <span style="font-weight: bold;">endereco</span>){//maria invoca esse construtor<br />this.name = name;<br />this.endereco = endereco;
                                              </p>

                                              <p>
                                                }
                                              </p>

                                              <p>
                                                public static void main(String array[ ]){
                                              </p>

                                              <p>
                                                Pessoa <span style="font-weight: bold;">jose</span> = new Pessoa(&ldquo;Jose&rdquo;,&ldquo;Rua São João&rdquo;,50);
                                              </p>

                                              <p>
                                                Pessoa <span style="font-weight: bold;">maria</span> = new Pessoa(&ldquo;Maria&rdquo;,&ldquo;Rua das flores&rdquo;);
                                              </p>

                                              <p>
                                                }
                                              </p>

                                              <p>
                                                }<span style="font-weight: bold;"><br /></span></span></span></span><span><span style="font-size:100%;"><span style="font-size:100%;"><br />Veja que no exemplo acima,<span style="font-weight: bold;"> jose aciona um construtor enquanto maria aciona outro construtor diferente de jose.</span> Existe uma verificação de Parametros e argumentos, e assim que é escolhido o mais indicado.</p> 

                                                <p>
                                                  <span style="font-weight: bold;font-size:180%;">Como invocar um Construtor dentro de outro Construtor da mesma classe?</span><span style="font-size:180%;"><span style="font-size:100%;"></p> 

                                                  <p>
                                                    </span></span>Usando a keyword this, A keyword this deve ser a primeira instrução de um construtor, Podemos ter instruções depois da instrução this, mais não antes.
                                                  </p>

                                                  <p>
                                                    <span style="font-weight: bold;">Veja o exemplo:</span>
                                                  </p>

                                                  <p>
                                                    public class <span style="font-weight: bold;">Pessoa</span>{
                                                  </p>

                                                  <p>
                                                    private String <span style="font-weight: bold;">name</span>;<br />private String <span style="font-weight: bold;">endereco</span>;<br />private int <span style="font-weight: bold;">numeroCasa</span>;
                                                  </p>

                                                  <p>
                                                    <span style="font-weight: bold;">private</span> <span style="font-weight: bold;">Pessoa</span>(String name,String endereco,int numeroCasa){<br />this.name= name;<br />this.endereco = endereco;<br />this.numeroCasa = numeroCasa;
                                                  </p>

                                                  <p>
                                                    }
                                                  </p>

                                                  <p>
                                                    <span style="font-weight: bold;">public</span> Pessoa(String name,String endereco){<br /><span style="font-weight: bold;">this</span>(<span style="font-weight: bold;">name</span>,<span style="font-weight: bold;">endereco</span>,<span style="font-weight: bold;"></span>); // Primeira linha do construtor
                                                  </p>

                                                  <p>
                                                    }
                                                  </p>

                                                  <p>
                                                    }
                                                  </p>

                                                  <p>
                                                    public class <span style="font-weight: bold;">Registro</span>{
                                                  </p>

                                                  <p>
                                                    </span></span></span></span></span></span><span style="color: rgb(0, 0, 0);font-family:arial;font-size:100%;"><span style="font-size:100%;"><span style="font-size:100%;"><span><span style="font-size:100%;"><span style="font-size:100%;"><br />public static void <span style="font-weight: bold;">main</span>(String array[ ]){</p> 

                                                    <p>
                                                      Pessoa maria = new <span style="font-weight: bold;">Pessoa</span>(&ldquo;Maria&rdquo;,&ldquo;Rua das flores&rdquo;);<br />}</span></span></span></span></span></span><br /><span style="color: rgb(0, 0, 0);font-family:arial;font-size:100%;"><span style="font-size:100%;"><span style="font-size:100%;"><span><span style="font-size:100%;"><span style="font-size:100%;"></p> 

                                                      <p>
                                                        }
                                                      </p>

                                                      <p>
                                                        Nesse exemplo podemos <span style="font-weight: bold;">perceber</span>:<br />1 &#8211; Na classe <span style="font-weight: bold;">Pessoa</span> temos um construtor que tem modificador de acesso <span style="font-weight: bold;">private</span>, oque significa que o acesso a ele só é dado na MESMA CLASSE.<br />2 &#8211; </span></span></span></span></span></span><span style="color: rgb(0, 0, 0);font-family:arial;font-size:100%;"><span style="font-size:100%;"><span style="font-size:100%;"><span><span style="font-size:100%;"><span style="font-size:100%;">Na classe <span style="font-weight: bold;">Pessoa</span> temos um construtor que tem modificador de acesso <span style="font-weight: bold;">public</span>, oque permite o acesso EXTERNO a classe, e foi uque fiz na Classe Registro</span></span></span></span></span></span>
                                                      </p>

                                                      <p>
                                                        <span style="color: rgb(0, 0, 0);font-family:arial;">Temos dois construtores com mesmo identificador porem com argumentos diferentes, oque </span><span style="font-weight: bold; color: rgb(0, 0, 0);font-family:arial;">CARACTERIZA Overload de Construtor.</span><br /><span style="color: rgb(0, 0, 0);font-family:arial;font-size:100%;"><span style="font-size:100%;"><span style="font-size:100%;"><span><span style="font-size:100%;"><span style="font-size:100%;"></p> 

                                                        <p>
                                                          <span style="font-size:130%;">Classe </span><span style="font-weight: bold;font-size:130%;">Pessoa</span><span style="font-size:130%;">:</span>
                                                        </p>

                                                        <p>
                                                          O construtor de assinatura:
                                                        </p>

                                                        <p>
                                                          </span></span></span></span></span></span><span style="color: rgb(0, 0, 0);font-family:arial;font-size:100%;"><span style="font-size:100%;"><span style="font-size:100%;"><span><span style="font-size:100%;"><span style="font-size:100%;"><span style="font-weight: bold;">public</span> Pessoa(String name,String endereco)<br />É invocado na Classe <span style="font-weight: bold;">Registro</span> pelo objeto <span style="font-weight: bold;">maria</span>, o construtor invoca outro construtor de assinatura:</p> 

                                                          <p>
                                                            </span></span></span></span></span></span><span style="color: rgb(0, 0, 0);font-family:arial;font-size:100%;"><span style="font-size:100%;"><span style="font-size:100%;"><span><span style="font-size:100%;"><span style="font-size:100%;"><span style="font-weight: bold;">private</span> <span style="font-weight: bold;">Pessoa</span>(String name,String endereco,int numeroCasa)</span></span></span></span></span></span>
                                                          </p>

                                                          <p>
                                                            <span style="color: rgb(0, 0, 0);font-family:arial;font-size:100%;"><span style="font-size:100%;"><span style="font-size:100%;"><span><span style="font-size:100%;"><span style="font-size:100%;">E passa como parametro os que recebeu e mais um valor que foi colocado como default, que seria o endereço de casa(ou seja o 0 &#8211; ZERO).</span></span></span></span></span></span><span style="color: rgb(0, 0, 0);font-family:arial;font-size:100%;"><span style="font-size:100%;"><span style="font-size:100%;"><span><span style="font-size:100%;"><span style="font-size:100%;"><span style="font-weight: bold;">this</span>(<span style="font-weight: bold;">name</span>,<span style="font-weight: bold;">endereco</span>,<span style="font-weight: bold;"></span>);</span></span></span></span></span></span><span style="color: rgb(0, 0, 0);font-family:arial;"> Como o construtor com modificador de acesso private so pode ser acessado pela mesma classe, foi isso que o construtor com modificador de acesso public fez, acessou ele de dentro da mesma classe.</span><br /><span style="color: rgb(0, 0, 0);font-family:arial;font-size:100%;"><span style="font-size:100%;"><span style="font-size:100%;"><span><span style="font-size:100%;"><span style="font-size:100%;"><br /><span style="font-weight: bold;font-size:180%;"><br />Construtores são Herdados?<br /></span><br />Não apenas membros de classe são herdados, Construtores não são membros.</p> 

                                                            <p>
                                                              <span style="font-weight: bold;font-size:180%;">Como invocar Construtores da SuperClass?<span style="font-size:100%;"><span style="font-weight: bold;"></p> 

                                                              <p>
                                                                </span></span></span><span style="font-size:100%;"><span style="font-size:100%;">Usando a keyword <span style="font-weight: bold;">super</span><span style="font-weight: bold;">() </span>na primeira linha do construtor da SubClass, Passa-se Parametros normais aos argumentos do construtor da SuperClass e </span></span></span></span></span></span></span></span><span style="color: rgb(0, 0, 0);font-family:arial;font-size:100%;"><span style="font-size:100%;"><span style="font-size:100%;"><span><span style="font-size:100%;"><span style="font-size:100%;"><span style="font-size:100%;"><span style="font-size:100%;"><span style="font-weight: bold;">super</span><span style="font-weight: bold;">()</span></span></span></span></span></span></span></span></span><span style="color: rgb(0, 0, 0);font-family:arial;font-size:100%;"><span style="font-size:100%;"><span style="font-size:100%;"><span><span style="font-size:100%;"><span style="font-size:100%;"><span style="font-size:100%;"><span style="font-size:100%;"> deve ser a primeira instrução do construtor da SubClass.</p> 

                                                                <p>
                                                                  <span style="font-weight: bold;">Vejamos o exemplo:</p> 

                                                                  <p>
                                                                    </span>public class <span style="font-weight: bold;">SuperClass</span>{
                                                                  </p>

                                                                  <p>
                                                                    public <span style="font-weight: bold;">SuperClass</span>(<span style="font-weight: bold;">int variable</span>){
                                                                  </p>

                                                                  <p>
                                                                    }
                                                                  </p>

                                                                  <p>
                                                                    }
                                                                  </p>

                                                                  <p>
                                                                    public class <span style="font-weight: bold;">SubClass extends SuperClass</span>{
                                                                  </p>

                                                                  <p>
                                                                    public <span style="font-weight: bold;">SubClass</span>( ){<br /><span style="font-weight: bold;">super(10); //Invocando o Construtor da SuperClass</span>
                                                                  </p>

                                                                  <p>
                                                                    }
                                                                  </p>

                                                                  <p>
                                                                    }<br /></span></span><span style="font-weight: bold;font-size:100%;"></p> 

                                                                    <p>
                                                                      <span style="font-size:180%;">Herança e this,super,SuperClass:</span></span><span style="font-size:100%;"><span style="font-size:100%;"><span style="font-size:100%;"></p> 

                                                                      <p>
                                                                        Primeiro fundamento básico, <span style="font-weight: bold;">toda classe quando não especificado explicitamente tem java.lang.Object como SuperClasse Direta.<br /></span>Segundo fundamente básico, <span style="font-weight: bold;">todo objeto criado a partir de um SubClasse também cria um objeto que é tanto SubClasse quanto SuperClasse, isso quer dizer que ao invocar o construtor de uma SubClasse você explicitamente ou implicitamente também invoca o construtor da SuperClasse.<br /></span></span></span></span><span style="font-weight: bold;font-size:100%;"></p> 

                                                                        <p>
                                                                          </span><span style="font-weight: bold;">Vejamos:</p> 

                                                                          <p>
                                                                            </span>public class <span style="font-weight: bold;">Pessoa</span>{
                                                                          </p>

                                                                          <p>
                                                                            private String name;<br />private String endereco;<br />private int numeroCasa;
                                                                          </p>

                                                                          <p>
                                                                            private <span style="font-weight: bold;">Pessoa</span>(String name,String endereco,int numeroCasa){<br />this.name= name;<br />this.endereco = endereco;<br />this.numeroCasa = numeroCasa;
                                                                          </p>

                                                                          <p>
                                                                            }
                                                                          </p>

                                                                          <p>
                                                                            public <span style="font-weight: bold;">Pessoa</span>(String name,String endereco){<br /><span style="font-weight: bold;">this</span>(<span style="font-weight: bold;">name</span>,<span style="font-weight: bold;">endereco,0</span>);
                                                                          </p>

                                                                          <p>
                                                                            }
                                                                          </p>

                                                                          <p>
                                                                            public static void <span style="font-weight: bold;">main</span>(String array[ ]){
                                                                          </p>

                                                                          <p>
                                                                            Pessoa maria = new <span style="font-weight: bold;">Pessoa</span>(&ldquo;Maria&rdquo;,&ldquo;Rua das flores&rdquo;);
                                                                          </p>

                                                                          <p>
                                                                            }
                                                                          </p>

                                                                          <p>
                                                                            }
                                                                          </p>

                                                                          <p>
                                                                            <span style="font-weight: bold;">Perceba que a Classe pessoa explicitamente não é um Object, porem toda classe tem Object como SuperClasse seja Explicitamente ou Implicitamente</span> E Diretamente ou Inderetamente, Vou provar isso através de bytecode.
                                                                          </p>

                                                                          <p>
                                                                            <span style="font-weight: bold;">Vejamos:</span>
                                                                          </p>

                                                                          <p>
                                                                            Logo no incio do arquivo.class temos:<br />Compiled from &ldquo;Pessoa.java&rdquo;<br />public class Pessoa <span style="font-weight: bold;">extends java.lang.Object{</p> 

                                                                            <p>
                                                                              Ou seja esta PROVADO que toda classe tem Object como SuperClasse, seja indiretamente ou Diretamente, Implicitamente ou Explicitamente.
                                                                            </p>

                                                                            <p>
                                                                              Agora dentro de qualquer um dos construtores da classe podemos Perceber que:</span>
                                                                            </p>

                                                                            <p>
                                                                              public Pessoa(java.lang.String, java.lang.String, int);<br />Code:<br />0: aload_0<br />1: invokespecial #1;<span style="font-weight: bold;"> //Method java/lang/Object.&ldquo;init><init>&rdquo;:()V</p> 

                                                                              <p>
                                                                                Essa linha de instrução </init></span></span></span></span></span></span></span><span style="color: rgb(0, 0, 0);font-family:arial;font-size:100%;"><span style="font-size:100%;"><span style="font-size:100%;"><span><span style="font-size:100%;"><span style="font-size:100%;">1: invokespecial #1;<span style="font-weight: bold;"> //Method java/lang/Object.&ldquo;init><init>&rdquo;:()V<br />Diz que ao cria-se um Objeto dessa classe também invoca-se o construtor da Classe Object. OQUE QUER DIZER QUE TODA VEZ QUE A JVM CRIA UMA INSTANCIA DA CLASSE ELA TAMBÉM CRIA UMA INSTANCIA DA SUPERCLASSE, SEJA IMPLICITAMENTE DITO COMO SUPER() OU EXPLICITAMENTE FEITO PELO COMPILADOR.<br /></init></span></span></span></span></span></span></span><span style="color: rgb(0, 0, 0);font-family:arial;font-size:100%;"><span style="font-size:100%;"><span style="font-size:100%;"><span><span style="font-size:100%;"><span style="font-size:100%;"></p> 

                                                                                <p>
                                                                                  <span style="font-weight: bold;font-size:180%;">Oquer faz a palavra super sozinha?</p> 

                                                                                  <p>
                                                                                    </span> Faz referência a SuperClasse da Classe na qual ela é usada, usando o Operador Ponto ou seja Notação de Ponto você pode acessar qualquer membro da SuperClasse. E usando super() com Parenteses você pode acessar o construtor da SuperClasse e entre os Parênteses passar os parametros devidos aos argumentos do construtor.
                                                                                  </p>

                                                                                  <p>
                                                                                    <span style="font-weight: bold;font-size:180%;">Como invocar métodos da SuperClasse?</p> 

                                                                                    <p>
                                                                                      </span> Sabemos que herança significa que a SubClasse tem tudo que a SuperClasse tem porem, em alguns casos é viável para ECONOMIZAR código.
                                                                                    </p>

                                                                                    <p>
                                                                                      public class <span style="font-weight: bold;">SuperDaSuper</span>{
                                                                                    </p>

                                                                                    <p>
                                                                                      public String <span style="font-weight: bold;">metodoSuper</span>(){
                                                                                    </p>

                                                                                    <p>
                                                                                      <span style="font-weight: bold;">return &ldquo;SuperDaSuper&rdquo;;</span>
                                                                                    </p>

                                                                                    <p>
                                                                                      }<br />}
                                                                                    </p>

                                                                                    <p>
                                                                                      public class <span style="font-weight: bold;">SuperClasse</span> <span style="font-weight: bold;">extends</span> <span style="font-weight: bold;">SuperDaSuper</span>{
                                                                                    </p>

                                                                                    <p>
                                                                                      public String <span style="font-weight: bold;">metodoSuper</span>(){
                                                                                    </p>

                                                                                    <p>
                                                                                      <span style="font-weight: bold;">return super.metodoSuper() +&ldquo; SuperClasse&rdquo;;</span>
                                                                                    </p>

                                                                                    <p>
                                                                                      }
                                                                                    </p>

                                                                                    <p>
                                                                                      }</span></span></span></span></span></span><span style="color: rgb(0, 0, 0);font-family:arial;font-size:100%;"><span style="font-size:100%;"><span style="font-size:100%;"><span><span style="font-size:100%;"><span style="font-size:100%;"></p> 

                                                                                      <p>
                                                                                        public class <span style="font-weight: bold;">SubClasse</span> extends <span style="font-weight: bold;">SuperClasse</span>{
                                                                                      </p>

                                                                                      <p>
                                                                                        public String <span style="font-weight: bold;">up</span>(){
                                                                                      </p>

                                                                                      <p>
                                                                                        <span style="font-weight: bold;">return super.metodoSuper() +&ldquo; SubClasse&rdquo;;</span>
                                                                                      </p>

                                                                                      <p>
                                                                                        }
                                                                                      </p>

                                                                                      <p>
                                                                                        public static void main(String array[ ]){<br />SubClasse referencia = new SubClasse();<br /><span style="font-weight: bold;">System.out.println(referencia.up());</span>
                                                                                      </p>

                                                                                      <p>
                                                                                        }<br />}
                                                                                      </p>

                                                                                      <p>
                                                                                        <span style="font-weight: bold;font-size:180%;">Sobrescrita de Métodos:</span>
                                                                                      </p>

                                                                                      <p>
                                                                                        Simplesmente uma SubClasse que troca a implementação de um método da SuperClasse, Lembrando que a <span style="font-weight: bold;">assinatura</span> do método deve ser a mesma(Isso inclui Também Mesmo argumentos em Ordem, Tipo e Quantidade).<br />Então basicamente para um método ser considerado Sobrescrito deve ter mesma Assinatura e diferentes Implementações.<br /></span></span></span></span></span></span><span style="color: rgb(0, 0, 0);font-family:arial;font-size:100%;"><span style="font-size:100%;"><span style="font-size:100%;"><span><span style="font-size:100%;"><span style="font-size:100%;"><br />public class <span style="font-weight: bold;">Funcionario</span>{</p> 

                                                                                        <p>
                                                                                          public void <span style="font-weight: bold;">metodo</span>(int x, double y){
                                                                                        </p>

                                                                                        <p>
                                                                                          }
                                                                                        </p>

                                                                                        <p>
                                                                                          }
                                                                                        </p>

                                                                                        <p>
                                                                                          public class <span style="font-weight: bold;">Gerente</span> extends <span style="font-weight: bold;">Funcionario</span>{
                                                                                        </p>

                                                                                        <p>
                                                                                          public void <span style="font-weight: bold;">metodo</span>(</span></span></span></span></span></span><span style="color: rgb(0, 0, 0);font-family:arial;font-size:100%;"><span style="font-size:100%;"><span style="font-size:100%;"><span><span style="font-size:100%;"><span style="font-size:100%;">int x, double y</span></span></span></span></span></span><span style="color: rgb(0, 0, 0);font-family:arial;font-size:100%;"><span style="font-size:100%;"><span style="font-size:100%;"><span><span style="font-size:100%;"><span style="font-size:100%;">){<br />int x = 0; // Mesma assinatura de metodo, troca de implementação</p> 

                                                                                          <p>
                                                                                            }
                                                                                          </p>

                                                                                          <p>
                                                                                            }
                                                                                          </p>

                                                                                          <p>
                                                                                            </span></span></span></span></span></span><a style="color: rgb(0, 0, 0); font-family: arial;" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_CdmD2AaXIBs/SqpCWJHaJoI/AAAAAAAAAaE/9qsdx0l9wwA/s1600-h/heranca3.png"><img style="cursor: pointer; width: 320px; height: 168px;" src="http://localhost/www/wp0/uploads/heranca3.png" alt="Exemplos Java,Linguagem Java, Programação, Java" id="BLOGGER_PHOTO_ID_5380185653019027074" border="0" /></a>
                                                                                          </p>

                                                                                          <p>
                                                                                            <span style="font-weight: bold; color: rgb(0, 0, 0);font-family:arial;">Clique na imagem para ampliar</span><br /><span style="color: rgb(0, 0, 0);font-family:arial;font-size:100%;"><span style="font-size:100%;"><span style="font-size:100%;"><span><span style="font-size:100%;"><span style="font-size:100%;"></p> 

                                                                                            <p>
                                                                                              A classe Gerente tem por Herança o &#8211; metodo() &#8211; Porem nesse caso o método herdado é sobrescrito na classe, VEJA que a implementação de metodo() na Classe <span style="font-weight: bold;">Funcionário</span> é diferente da implementação de metodo() na Classe <span style="font-weight: bold;">Gerente</span>.
                                                                                            </p>

                                                                                            <p>
                                                                                              <span style="font-weight: bold;">O método Sobrescrito não pode ter menos acessibilidade Vejamos:</span>
                                                                                            </p>

                                                                                            <p>
                                                                                              </span></span></span></span></span></span><span style="color: rgb(0, 0, 0);font-family:arial;font-size:100%;"><span style="font-size:100%;"><span style="font-size:100%;"><span><span style="font-size:100%;"><span style="font-size:100%;">public class <span style="font-weight: bold;">Funcionario</span>{</p> 

                                                                                              <p>
                                                                                                <span style="font-weight: bold;">public</span> void <span style="font-weight: bold;">metodo</span>(int x, double y){
                                                                                              </p>

                                                                                              <p>
                                                                                                }
                                                                                              </p>

                                                                                              <p>
                                                                                                }
                                                                                              </p>

                                                                                              <p>
                                                                                                public class <span style="font-weight: bold;">Gerente</span> extends <span style="font-weight: bold;">Funcionario</span>{
                                                                                              </p>

                                                                                              <p>
                                                                                                <span style="font-weight: bold;">private</span> void <span style="font-weight: bold;">metodo</span>(</span></span></span></span></span></span><span style="color: rgb(0, 0, 0);font-family:arial;font-size:100%;"><span style="font-size:100%;"><span style="font-size:100%;"><span><span style="font-size:100%;"><span style="font-size:100%;">int x, double y</span></span></span></span></span></span><span style="color: rgb(0, 0, 0);font-family:arial;font-size:100%;"><span style="font-size:100%;"><span style="font-size:100%;"><span><span style="font-size:100%;"><span style="font-size:100%;">){<br />int x = 0; // Mesma assinatura de metodo, troca de implementação</p> 

                                                                                                <p>
                                                                                                  }
                                                                                                </p>

                                                                                                <p>
                                                                                                  }</span></span></span></span></span></span><br /><span style="color: rgb(0, 0, 0);font-family:arial;font-size:100%;"><span style="font-size:100%;"><span style="font-size:100%;"><span><span style="font-size:100%;"><span style="font-size:100%;"><br />Erro de Compilação, O modificador de acesso do Método Sobrescrito é menos acessível doque a do método Original, em</span></span></span></span></span></span><span style="color: rgb(0, 0, 0);font-family:arial;"> </span><span style="color: rgb(0, 0, 0);font-family:arial;font-size:100%;"><span style="font-size:100%;"><span style="font-size:100%;"><span><span style="font-size:100%;"><span style="font-size:100%;"><span style="font-weight: bold;">Funcionario temos:<br /></span></span></span></span></span></span></span><span style="color: rgb(0, 0, 0);font-family:arial;font-size:100%;"><span style="font-size:100%;"><span style="font-size:100%;"><span><span style="font-size:100%;"><span style="font-size:100%;"><span style="font-weight: bold;">public</span> void <span style="font-weight: bold;">metodo</span>(int x, double y) &#8211; > Método da SuperClasse</span></span></span></span></span></span><br /><span style="color: rgb(0, 0, 0);font-family:arial;font-size:100%;"><span style="font-size:100%;"><span style="font-size:100%;"><span><span style="font-size:100%;"><span style="font-size:100%;"><span style="font-weight: bold;"></p> 

                                                                                                  <p>
                                                                                                    EM Gerente </span></span></span></span></span></span></span><span style="color: rgb(0, 0, 0);font-family:arial;font-size:100%;"><span style="font-size:100%;"><span style="font-size:100%;"><span><span style="font-size:100%;"><span style="font-size:100%;"><span style="font-weight: bold;"> temos a assinatura:<br /></span></span></span></span></span></span></span><span style="color: rgb(0, 0, 0);font-family:arial;font-size:100%;"><span style="font-size:100%;"><span style="font-size:100%;"><span><span style="font-size:100%;"><span style="font-size:100%;"><span style="font-weight: bold;">private</span> void <span style="font-weight: bold;">metodo</span>(</span></span></span></span></span></span><span style="color: rgb(0, 0, 0);font-family:arial;font-size:100%;"><span style="font-size:100%;"><span style="font-size:100%;"><span><span style="font-size:100%;"><span style="font-size:100%;">int x, double y</span></span></span></span></span></span><span style="color: rgb(0, 0, 0);font-family:arial;font-size:100%;"><span style="font-size:100%;"><span style="font-size:100%;"><span><span style="font-size:100%;"><span style="font-size:100%;">) &#8211; > Método Sobrescrito</p> 

                                                                                                    <p>
                                                                                                      </span></span></span></span></span></span><span style="color: rgb(0, 0, 0);font-family:arial;font-size:100%;"><span style="font-size:100%;"><span style="font-size:100%;"><span><span style="font-size:100%;"><span style="font-size:100%;"></p> 

                                                                                                      <p>
                                                                                                        <span style="font-weight: bold;">ERRO DE COMPILAÇÃO</span>
                                                                                                      </p>

                                                                                                      <p>
                                                                                                        </span></span></span></span></span></span><span style="color: rgb(0, 0, 0);font-family:arial;font-size:100%;"><span style="font-size:100%;"><span style="font-size:100%;"><span><span style="font-size:100%;"><span style="font-size:100%;"><span style="font-size:180%;"><br /></span></span></span></span><span style="font-weight: bold;"><span style="font-size:100%;"><span style="font-size:100%;"><span style="font-size:180%;">É hora da revisão:</span></p> 

                                                                                                        <p>
                                                                                                          </span></span></span><span style="font-weight: bold;"><span style="font-size:100%;"><br /></span></span><span><span style="font-size:100%;">&#8211; Quando você declara um método, você cria a assinatura dele</p> 

                                                                                                          <p>
                                                                                                            &#8211; O bloco de código de um método é considerado a implementação dele<br /></span></span><span style="font-weight: bold;"><span style="font-size:100%;"><br /></span></span><span><span style="font-size:100%;">&#8211; Overload de método são caracterizados por métodos de mesma assinatura porem diferentes argumentos em tipo, ordem ou quantidade.</p> 

                                                                                                            <p>
                                                                                                              &#8211; Método Sobrecarregados se tiverem a mesma assinatura e diferentes argumentos em tipo,ordem ou quantidade podem ter tipo de retorno diferente
                                                                                                            </p>

                                                                                                            <p>
                                                                                                              &#8211; Podemos ter Overload de Construtores, que diz basicamente:<br />Várias maneiras de se construir um Objeto<br /></span></span><span style="font-weight: bold;"><span style="font-size:100%;"><br />&#8211; O this </span></span><span><span style="font-size:100%;">é usado para:<br /></span></span></span></span></span><span style="color: rgb(0, 0, 0);font-family:arial;font-size:100%;"><span style="font-size:100%;"><span style="font-size:100%;"><span><span style="font-size:100%;"><span style="font-size:100%;">*Resolve Ambiguidade<br />*Passar o objeto atual como Parametro<br /></span></span></span></span></span></span><span style="color: rgb(0, 0, 0);font-family:arial;font-size:100%;"><span style="font-size:100%;"><span style="font-size:100%;"><span><span style="font-size:100%;"><span style="font-size:100%;">*Invocar um construtor da mesma classe</span></span></span></span></span></span><br /><span style="color: rgb(0, 0, 0);font-family:arial;font-size:100%;"><span style="font-size:100%;"><span style="font-size:100%;"><span><span style="font-size:100%;"><span style="font-size:100%;"><br /></span></span></span></span></span></span><span style="color: rgb(0, 0, 0);font-family:arial;font-size:100%;"><span style="font-size:100%;"><span style="font-size:100%;"><span><span style="font-size:100%;">&#8211; A palavra chave this em um construtor deve estar na primeira linha do construtor. Pode haver código depois de this mais não antes</p> 

                                                                                                              <p>
                                                                                                                &#8211; Se você usar this em um construtor para invocar outro, deve passar parametros normais ao construtor invocado
                                                                                                              </p>

                                                                                                              <p>
                                                                                                                &#8211; Construtores não são herdados
                                                                                                              </p>

                                                                                                              <p>
                                                                                                                &#8211; Para invocar o construtor da SuperClasse use a keyword super()
                                                                                                              </p>

                                                                                                              <p>
                                                                                                                &#8211; super() deve estar na primeira linha do construtor da SubClasse
                                                                                                              </p>

                                                                                                              <p>
                                                                                                                &#8211; super sem paranteses te da acesso a membros da SuperClasse e com parenteses ( ), te da acesso ao construtor da SuperClasse
                                                                                                              </p>

                                                                                                              <p>
                                                                                                                &#8211; Para ter Sobrescrita de um método apenas deixe a Mesma assinatura e troque a Implementação do método<br /></span></span><span style="font-weight: bold;"><span style="font-size:100%;"><br /></span></span><span><span style="font-size:100%;">&#8211; Métodos Sobrescritos devem ter mesma assinatura que o método original(isso inclui mesmos Argumentos em ordem,tipo e quantidade de argumentos) além do método sobrescrito não pode ter um modificador de acesso menos acessivel doque o método original.</span></span><span style="font-weight: bold;"><span style="font-size:100%;"><br /></span></span></span></span></span>
                                                                                                              </p>