Conceitos de Sobrescrita, metodos e exemplos

Ola alguem pode me falar um pouco sobrescrita alguns exemplos e suas vantagens

Cara, tem vários tópicos falando sobre isso.
Mas , sobrescrita de métodos é mais ou menos assim

class A{
 public void fazAlgo{
  .......seu código....
 }
}
class B extends A{
 public void fazAlgo(){
  ....seu código.............
 }

class Teste{
public static void main(String args[]){
 A a = new A();
 A b = new B();
 
 a.fazAlgo(); //executa método da class A
 b.fazAlgo(); //executa método da classe B
 }
}

Bom dia a todos.

O conceito de sobrescrita, reside quando voce, ao fazer a herança de classes, onde as classes filhas (sub classes) herdam todos os métodos da classe pai (super classe), ao declarar o mesmo método com a mesma assinatura da classe pai na classe filha, voce está fazendo a sobrescrita desse método na classe filha, ou seja, voce está sobrescrevendo e substituindo pelo mesmo método só que possa estar com uma implementação diferente.

Vamos a exemplo prático pegando carona no exemplo do nosso amigo.


   public class A  {
  
        public void fazAlgo() {  
             System.out.println("Este é o método fazAlgo da classe A (Classe Pai)");  
       }  
   
   }  

   public class B extends A {
  
       @Override
       public void fazAlgo() {  
            System.out.println("Este é o método sobrescrito fazAlgo da classe B (Classe Filha)");  
       }
  
   }

   public static void main(String args[]) {

       A a = new A();
       a.fazAlgo();  // Retorna  "Este é o método fazAlgo da classe A (Classe Pai)"

       B b = new B();
       b.fazAlgo();  // Retorna  "Este é o método sobrescrito fazAlgo da classe B (Classe Filha)";

    }

Repare que a instância b que foi tipada como sendo da Classe B, executa a implementação do novo método que foi sobrescrito na mesma, ou seja, substituiu o método falAlgo() da classe Pai “A”, agora vamos ao exemplo.

Quanto a sintaxe “@Override” que siginfica sobrescrever, nada mais é que uma diretiva que avisa ao compilador Javac para diferenciar com o mesmo método da classe pai, e que o método logo abaixo de sua linha é que deve ser o substituto.


   public class A  {
  
        public void fazAlgo() {  
             System.out.println("Este é o método fazAlgo da classe A (Classe Pai)");  
       }  
   
   }  

   public class B extends A {
  
       public void fazAlgoAindaMelhor() {  
            System.out.println("Este é o método fazAlgoAindaMelhor da classe B (Classe Filha)");  
       }
  
   }

   public static void main(String args[]) {

       A a = new A();
       a.fazAlgo();  // Retorna  "Este é o método fazAlgo da classe A (Classe Pai)"

       B b = new B();
       b.fazAlgo(); // Retorna  "Este é o método fazAlgo da classe A (Classe Pai)"
       b.fazAlgoAindaMelhor();  // Retorna "Este é o método fazAlgoAindaMelhor da classe B (Classe Filha)"
    }

Repare agora que o método fazAlgo(), não foi sobrescrito na classe descendente “B”, portanto ele está herdando o método fazAlgo() da classe “A” e vai executar a mesma implementação, tanto na instância da classe “A” quanto na “B”, o método falAlgoAindaMelhor() está com o nome diferente, e portanto ele passe a ser um novo método na classe “B”.

Qual é a vantagem disto :?: :?: :?:

Simples, suponhamos que o método fazAlgo() da classe “A” (Classe Pai), voce queira utilizar a sua implementação em todas as classes herdadas, porém em uma determinada classe herdada, voce queira aproveitar a sua implementação acrescentando algo a mais, vamos a exemplo:


   public class A  {
  
        public void fazAlgo() {  
             System.out.println("Esta é execução fazAlgo da classe A (Classe Pai)");  
       }  
   
   }  

   public class B extends A {

       private Integer a = 5, b = 10;
  
       @Override
       public void fazAlgo() {
            super.falAlgo();  // Executa a implementação do método fazAlgo() da classe "A" (Classe Pai)
            System.out.println("Esta é a execução fazAlgo da classe B (Classe Filha)");
            System.out.println(a + b);
              
       }
  
   }

   public static void main(String args[]) {

       A a = new A();
       a.fazAlgo();  // Retorna  "Esta é a execução fazAlgo da classe A (Classe Pai)"

       B b = new B();
       b.fazAlgo();  /* Retorna "Esta é a execução fazAlgo da classe A (Classe Pai)
                                           Esta é  a execução fazAlgo da classe B (Classe Filha)
                                           15" */ 

    }

Cappichi.

[quote=wesleysilva]Ola alguem pode me falar um pouco sobrescrita alguns exemplos e suas vantagens[/quote]Procure entender primeiro, polimorfismo. Seu uso está, em geral, atrelado a isso.

PS: Isso me cheira a trabalho escolar…