Sobrecarga de Métodos

Assinatura de um Método

  • Formada por:
    • nome do método
    • número de parâmetros
    • tipos dos parâmetros (considerando a ordem)
  • Métodos tenham o mesmo nome, mesmo número de parâmetros com os mesmos tipos (na ordem) têm a mesma assinatura

Sobrecarga de Métodos

  • Técnica que envolve criar vários métodos com o mesmo nome e implementações diferentes
  • Tipos:
    • sobrecarga na mesma classe
      • assinaturas diferentes
    • sobrecarga em classes herdeiras
      • assinaturas podem ser iguais ou diferentes
      • tratado na aula de polimorfismo

Versão A

Cada método define atualiza os atributos por sua conta:


In [1]:
public class Horario {
   private int hora, minuto, segundo;
   
   public void define() {
      this.hora = 0;
      this.minuto = 0;
      this.segundo = 0;
   }
   
   public void define(int hora, int minuto, int segundo) {
      this.hora = hora;
      this.minuto = minuto;
      this.segundo = segundo;
   }
   
   public void define(String horario) {
      this.hora = Integer.parseInt(horario.substring(0,2));
      this.minuto = Integer.parseInt(horario.substring(3,5));
      this.segundo = Integer.parseInt(horario.substring(6));
   }
   
   public void tick() {
      segundo++;
      if (segundo == 60) {
         minuto++;
         segundo = 0;
      }
      if (minuto == 60) {
         hora++;
         minuto = 0;
      }
      if (hora == 24) {
         hora = 0;
         minuto = 0;
         segundo = 0;
      }
   }
   
   public String toString() {
      return hora + ":" + minuto + ":" + segundo;
   }
}


Out[1]:
com.twosigma.beaker.javash.bkr7a473a90.Horario

In [2]:
Horario h1 = new Horario(),
        h2 = new Horario(),
        h3 = new Horario();

h1.define();
h2.define(10, 15, 59);
h3.define("07:53:02");

h1.tick();
h2.tick();
h3.tick();

System.out.println("Horario 1: " + h1);
System.out.println("Horario 2: " + h2);
System.out.println("Horario 3: " + h3);


Horario 1: 0:0:1
Horario 2: 10:16:0
Horario 3: 7:53:3
Out[2]:
null

Versão B

Métodos sobrecarregados concentram a atualização dos atributos em um deles:


In [3]:
public class Horario {
   private int hora, minuto, segundo;
   
   public void define() {
      this.define(0, 0, 0);
   }
   
   public void define(int hora, int minuto, int segundo) {
      this.hora = hora;
      this.minuto = minuto;
      this.segundo = segundo;
   }
   
   public void define(String horario) {
      this.define(Integer.parseInt(horario.substring(0,2)),
                  Integer.parseInt(horario.substring(3,5)),
                  Integer.parseInt(horario.substring(6)));
   }
   
   public void tick() {
      segundo++;
      if (segundo == 60) {
         minuto++;
         segundo = 0;
      }
      if (minuto == 60) {
         hora++;
         minuto = 0;
      }
      if (hora == 24) {
         hora = 0;
         minuto = 0;
         segundo = 0;
      }
   }
   
   public String toString() {
      return hora + ":" + minuto + ":" + segundo;
   }
}


Out[3]:
com.twosigma.beaker.javash.bkr7a473a90.Horario

In [4]:
Horario h1 = new Horario(),
        h2 = new Horario(),
        h3 = new Horario();

h1.define();
h2.define(10, 15, 59);
h3.define("07:53:02");

h1.tick();
h2.tick();
h3.tick();

System.out.println("Horario 1: " + h1);
System.out.println("Horario 2: " + h2);
System.out.println("Horario 3: " + h3);


Horario 1: 0:0:1
Horario 2: 10:16:0
Horario 3: 7:53:3
Out[4]:
null

Tarefa - Sobrecarga em Métodos Circulo

Dada a classe Circulo apresentada anteriormente (versão sem construtor), escreva dois métodos define sobrecarregados que inicializem centroX, centroY e raio.


In [ ]:

Sobrecarga de Construtor

Construtor também pode ser sobrecarregado.

Versão A

Cada construtor inicializa os atributos por sua conta:


In [5]:
public class Horario {
   private int hora, minuto, segundo;
   
   public Horario() {
      this.hora = 0;
      this.minuto = 0;
      this.segundo = 0;
   }
   
   public Horario(int hora, int minuto, int segundo) {
      this.hora = hora;
      this.minuto = minuto;
      this.segundo = segundo;
   }
   
   public Horario(String horario) {
      this.hora = Integer.parseInt(horario.substring(0,2));
      this.minuto = Integer.parseInt(horario.substring(3,5));
      this.segundo = Integer.parseInt(horario.substring(6));
   }
   
   public void tick() {
      segundo++;
      if (segundo == 60) {
         minuto++;
         segundo = 0;
      }
      if (minuto == 60) {
         hora++;
         minuto = 0;
      }
      if (hora == 24) {
         hora = 0;
         minuto = 0;
         segundo = 0;
      }
   }
   
   public String toString() {
      return hora + ":" + minuto + ":" + segundo;
   }
}


Out[5]:
com.twosigma.beaker.javash.bkr7a473a90.Horario

In [6]:
Horario h1 = new Horario(),
        h2 = new Horario(10, 15, 59),
        h3 = new Horario("07:53:02");

h1.tick();
h2.tick();
h3.tick();

System.out.println("Horario 1: " + h1);
System.out.println("Horario 2: " + h2);
System.out.println("Horario 3: " + h3);


Horario 1: 0:0:1
Horario 2: 10:16:0
Horario 3: 7:53:3
Out[6]:
null

Versão B

Construtores sobrecarregados concentram atribuição em um deles:


In [7]:
public class Horario {
   private int hora, minuto, segundo;
   
   public Horario() {
      this(0, 0, 0);
   }
   
   public Horario(int hora, int minuto, int segundo) {
      this.hora = hora;
      this.minuto = minuto;
      this.segundo = segundo;
   }
   
   public Horario(String horario) {
      this(Integer.parseInt(horario.substring(0,2)),
           Integer.parseInt(horario.substring(3,5)),
           Integer.parseInt(horario.substring(6)));
   }
   
   public void tick() {
      segundo++;
      if (segundo == 60) {
         minuto++;
         segundo = 0;
      }
      if (minuto == 60) {
         hora++;
         minuto = 0;
      }
      if (hora == 24) {
         hora = 0;
         minuto = 0;
         segundo = 0;
      }
   }
   
   public String toString() {
      return hora + ":" + minuto + ":" + segundo;
   }
}


Out[7]:
com.twosigma.beaker.javash.bkr7a473a90.Horario

In [8]:
Horario h1 = new Horario(),
        h2 = new Horario(10, 15, 59),
        h3 = new Horario("07:53:02");

h1.tick();
h2.tick();
h3.tick();

System.out.println("Horario 1: " + h1);
System.out.println("Horario 2: " + h2);
System.out.println("Horario 3: " + h3);


Horario 1: 0:0:1
Horario 2: 10:16:0
Horario 3: 7:53:3
Out[8]:
null

Tarefa - Sobrecarga do Construtor em Circulo

Dada a classe Circulo apresentada anteriormente (versão sem construtor), escreva dois métodos define sobrecarregados que inicializem centroX, centroY e raio.

Adapte a tarefa anterior de modo que a inicialização de centroX, centroY e raio possa ser feita por dois construtores sobrecarregados.


In [ ]: