-
Notifications
You must be signed in to change notification settings - Fork 24
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #57 from Guadanhim/upstream/polimorfismo
#2 Explicação do pilar de Polimorfismo
- Loading branch information
Showing
3 changed files
with
111 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
# Polimorfismo | ||
|
||
## Um dos pilares da programação orientada a objetos (POO) | ||
|
||
Morfologicamente falando ao separar a palava temos _Poli_ que significa muitos, vários e _morfismo_ que está relacionado à forma. | ||
Sendo assim _Polimorfismo_ que dizer "várias formas". | ||
|
||
O polimorfismo permite que objetos de classes diferentes respondam à mesma mensagem ou método de maneiras diferentes. Isso é possível porque objetos de tipos diferentes podem ter métodos com o mesmo nome, mas comportamentos diferentes. | ||
|
||
Portanto, o polimorfismo é uma característica importante da POO, pois torna o código mais versátil e flexível. Isso significa que você pode escrever código que funcione para objetos de várias classes diferentes, desde que essas classes implementem métodos com assinatura igual esperada. | ||
|
||
Podemos pontuar também o fato dele ser complementado pela _herança_ (um outro pilar da POO). | ||
|
||
E por se dividir em dois tipos principais: | ||
- _Sobrecarga_. | ||
- _Sobrescrita_. | ||
|
||
### Sobrecarga | ||
|
||
A sobrecarga é a capacidade de uma classe ter dois ou mais métodos com o mesmo nome, mas com assinaturas diferentes. A assinatura de um método é composta pelo seu nome, tipo de retorno e lista de parâmetros. | ||
|
||
### Sobrescrita | ||
|
||
A sobrescrita é a capacidade de uma subclasse substituir o comportamento de um método herdado da superclasse. A sobrescrita requer que o método na subclasse tenha a mesma assinatura do método na superclasse. | ||
|
||
#### Diferenças entre os tipos: | ||
| Característica | Sobrecarga | Sobrescrita | | ||
|---|---|---| | ||
| Definição | Capacidade de uma classe ter dois ou mais métodos com o mesmo nome, mas com assinaturas diferentes | Capacidade de uma subclasse substituir o comportamento de um método herdado da superclasse | | ||
| Assinatura | Diferente | Igual | | ||
| Tipo de retorno | Pode ser diferente | Deve ser o mesmo | | ||
| Lista de parâmetros | Pode ser diferente | Deve ser a mesma | | ||
| Modificadores | Qualquer | Não pode ser `final` ou `static` | | ||
|
||
|
||
## Referências | ||
|
||
- [Java - Oracle ](https://docs.oracle.com/javase/tutorial/java/IandI/polymorphism.html) | ||
|
||
- [UFSC - Prof Frank Siqueira ](http://www.inf.ufsc.br/~frank.siqueira/INE5605/10.Polimorfismo.pdf) | ||
|
||
- [UNESP - Prof Daniel Cardozo Mourao ](https://www.feg.unesp.br/Home/PaginasPessoais/profadanielacardozomourao/polimorfismo.pdf) | ||
|
||
- [UFSM - Flash utilizando Orientação a Objetos e a linguagem XML. ](http://www-usr.inf.ufsm.br/~rose/curso3/cafe/cap4_Polimorfismo.pdf) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
public class PolimorfismoSobrecarga { | ||
|
||
// Método que aceita dois inteiros como argumentos | ||
public int somar(int a, int b) { | ||
return a + b; | ||
} | ||
|
||
// Método que aceita três inteiros como argumentos | ||
public int somar(int a, int b, int c) { | ||
return a + b + c; | ||
} | ||
|
||
// Método que aceita dois números de ponto flutuante como argumentos | ||
public double somar(double a, double b) { | ||
return a + b; | ||
} | ||
|
||
public static void main(String[] args) { | ||
PolimorfismoSobrecarga calculadora = new PolimorfismoSobrecarga(); | ||
|
||
// Chamando o método de soma com dois inteiros | ||
int resultado1 = calculadora.somar(5, 10); | ||
System.out.println("Soma de inteiros: " + resultado1); | ||
|
||
// Chamando o método de soma com três inteiros | ||
int resultado2 = calculadora.somar(5, 10, 15); | ||
System.out.println("Soma de três inteiros: " + resultado2); | ||
|
||
// Chamando o método de soma com dois números de ponto flutuante | ||
double resultado3 = calculadora.somar(3.5, 2.5); | ||
System.out.println("Soma de números de ponto flutuante: " + resultado3); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
// Classe pai (superclasse) | ||
class Animal { | ||
public void fazerSom() { | ||
System.out.println("Animal faz algum som"); | ||
} | ||
} | ||
|
||
// Classe filha (subclasse) | ||
class Cachorro extends Animal { | ||
@Override | ||
public void fazerSom() { | ||
System.out.println("Cachorro late"); | ||
} | ||
} | ||
|
||
// Outra classe filha (subclasse) | ||
class Gato extends Animal { | ||
@Override | ||
public void fazerSom() { | ||
System.out.println("Gato mia"); | ||
} | ||
} | ||
|
||
public class PolimorfismoSobrescrita { | ||
public static void main(String[] args) { | ||
Animal meuAnimal; | ||
|
||
meuAnimal = new Cachorro(); | ||
meuAnimal.fazerSom(); // Chama o método sobrescrito da classe Cachorro | ||
|
||
meuAnimal = new Gato(); | ||
meuAnimal.fazerSom(); // Chama o método sobrescrito da classe Gato | ||
} | ||
} |