UTFPR – Campus Curitiba - DAELN Cursos de Eng. Eletrônica/Eng. da Computação IF62C - Fundamentos de Programação Semana 12 – Overloading X Overriding Prof.a Tânia Preto / Prof. Robinson Vida Overloading X Overriding (i/iv) São formas diferentes de manipular um mesmo método; Override: ◦ É a sobrescrita de método; ◦ Ocorre no processo de herança, onde um método declarado e implementado na classe pai, pode ser redefinido na classe filha; ◦ Métodos marcados como final, private ou static não são herdados e por este motivo não podem ser sobrescritos; ◦ Outro ponto importante é que os métodos sobrescritos não podem declarar um modificador de acesso mais restritivo do que o que foi sobrescrito. Ex.: se na classe pai um método é protected (pode ser acessado fora do pacote ao ser herdado), na classe filha o respectivo método sobrescrito não pode ser default (acessado só no pacote) ou muito menos private (acessado só na classe); Overloading X Overriding (ii/iv) Override – Exemplo 1- Java: class Musician { // classe pai public int yearsOfStruggle; public void play(int howLong) { //metodo ... } public void starve() { //metodo ... } } class Pianist extends Musician { //classe filha // override (sobrescrita) do método play public void play(int howLong) { ... } } Overloading X Overriding (ii/iv) Override – Exemplo 2- C++: class Base { public: virtual void DoSomething( ) { x = x + 5; } private: int x; }; class Derived : public Base { public: virtual void DoSomething( ) { //sobreescreve o anterior y = y + 5; //acrescenta comando Base::DoSomething(); // invoca método da classe base } private: int y; }; Overloading X Overriding (ii/iv) Overload: ◦ É a sobrecarga de método; ◦ Os métodos sobrecarregados contém o mesmo nome, mas com tipos de parâmetros e/ou retornos diferentes; ◦ Não é o mesmo método (pois varia nos parâmetros e/ou retorno) e não sobrescreve o método pai; ◦ Métodos sobrecarregados podem ser usados na mesma classe ou subclasse, oferecendo mais opções aos usuários; ◦ Soluções mais elegantes podem ser obtidas a partir do uso de sobrecarga conforme mostra o exemplo 1; ◦ Construtor pode ser usado dentro de construtor na definição de novos métodos sobrecarregados, conforme exemplo 2; Overloading X Overriding (ii/iv) Overload - Exemplo 1 java - - Sobrecarga oferecendo nova solução: Seja uma implementação de métodos para mostrar na tela diferentes tipos de dados: public class DataShow { ... public void showString(String s) { ... } public void showInt(int i) { ... } public void showDouble(double f) { ... } public void showIntDouble(int i, double f) { ... } } // Neste exemplo foi usado um método diferente para cada tipo. Overloading X Overriding (ii/iv) Overload - Exemplo 1 - cont. - Implementação reescrita usando o conceito de overload: public class DataShow { ... public void show(String s) { ... } public void show(int i) { ... } public void show(double f) { ... } public void show(int i, double f) { ... } } Overloading X Overriding (ii/iv) Overload - Exemplo 2 – Java - Sobrecarga de método construtor public class A { public A(int x, float y) { //construtor 1 this(y); // usa construtor 2... } public A(float x) { // construtor 2 this((int)x, x); // usa construtor 1... ... } } Overloading X Overriding (ii/iv) Overload - Exemplo 3 – C++ Sobrecarga public class Test { public static void calcular(int x, int y){ System.out.println(“dois numeros: ” + (x+ y)); } public static void calcular(int x, int y, int z){ System.out.println(“tres numeros: ” + (x+ y+ z)); } public static void main(String [] args){ int a = 10; int b = 20; int c = 30; calcular(b,c); // mostra: dois numeros: 50 calcular(b,c,a); // mostra: tres numeros: 60 } }