Polimorfismo Java
Polimorfismo Java
Neste tutorial, aprenderemos sobre o polimorfismo Java e sua implementação com a ajuda de exemplos.
O polimorfismo é um conceito importante da programação orientada a objetos. Significa simplesmente mais de uma forma.
Ou seja, uma mesma entidade (método ou operador ou objeto) pode realizar diferentes operações em diferentes cenários.
Exemplo:polimorfismo Java
class Polygon {
// method to render a shape
public void render() {
System.out.println("Rendering Polygon...");
}
}
class Square extends Polygon {
// renders Square
public void render() {
System.out.println("Rendering Square...");
}
}
class Circle extends Polygon {
// renders circle
public void render() {
System.out.println("Rendering Circle...");
}
}
class Main {
public static void main(String[] args) {
// create an object of Square
Square s1 = new Square();
s1.render();
// create an object of Circle
Circle c1 = new Circle();
c1.render();
}
}
Saída
Rendering Square... Rendering Circle...
No exemplo acima, criamos uma superclasse:Polygon e duas subclasses:Quadrado e Círculo . Observe o uso do
render()
método. O objetivo principal do
render()
é renderizar a forma. No entanto, o processo de renderização de um quadrado é diferente do processo de renderização de um círculo. Portanto, o
render()
O método se comporta de maneira diferente em diferentes classes. Ou podemos dizer render()
é polimórfico. Por que polimorfismo?
O polimorfismo nos permite criar um código consistente. No exemplo anterior, também podemos criar métodos diferentes:
renderSquare()
e renderCircle()
para renderizar Quadrado e Círculo , respectivamente. Isso funcionará perfeitamente. No entanto, para cada forma, precisamos criar métodos diferentes. Isso tornará nosso código inconsistente.
Para resolver isso, o polimorfismo em Java nos permite criar um único método
render()
que se comportarão de maneira diferente para formas diferentes. Observação :O
print()
O método também é um exemplo de polimorfismo. É usado para imprimir valores de diferentes tipos como char
, int
, string
, etc Podemos obter polimorfismo em Java usando as seguintes maneiras:
- Substituição de método
- Método de sobrecarga
- Sobrecarga do operador
Substituição do método Java
Durante a herança em Java, se o mesmo método estiver presente na superclasse e na subclasse. Então, o método na subclasse substitui o mesmo método na superclasse. Isso é chamado de substituição de método.
Neste caso, o mesmo método realizará uma operação na superclasse e outra operação na subclasse. Por exemplo,
Exemplo 1:polimorfismo usando substituição de método
class Language {
public void displayInfo() {
System.out.println("Common English Language");
}
}
class Java extends Language {
@Override
public void displayInfo() {
System.out.println("Java Programming Language");
}
}
class Main {
public static void main(String[] args) {
// create an object of Java class
Java j1 = new Java();
j1.displayInfo();
// create an object of Language class
Language l1 = new Language();
l1.displayInfo();
}
}
Saída :
Java Programming Language Common English Language
No exemplo acima, criamos uma superclasse chamada Language e uma subclasse chamada Java . Aqui, o método
displayInfo()
está presente em ambos Idioma e Java . O uso de
displayInfo()
é imprimir as informações. No entanto, está imprimindo informações diferentes em Language e Java . Com base no objeto usado para chamar o método, as informações correspondentes são impressas.
Observação :O método que é chamado é determinado durante a execução do programa. Portanto, a substituição de método é um polimorfismo de tempo de execução .
2. Sobrecarga do método Java
Em uma classe Java, podemos criar métodos com o mesmo nome se diferirem em parâmetros. Por exemplo,
void func() { ... }
void func(int a) { ... }
float func(double a) { ... }
float func(int a, float b) { ... }
Isso é conhecido como sobrecarga de métodos em Java. Aqui, o mesmo método realizará operações diferentes com base no parâmetro.
Exemplo 3:polimorfismo usando sobrecarga de método
class Pattern {
// method without parameter
public void display() {
for (int i = 0; i < 10; i++) {
System.out.print("*");
}
}
// method with single parameter
public void display(char symbol) {
for (int i = 0; i < 10; i++) {
System.out.print(symbol);
}
}
}
class Main {
public static void main(String[] args) {
Pattern d1 = new Pattern();
// call method without any argument
d1.display();
System.out.println("\n");
// call method with a single argument
d1.display('#');
}
}
Saída :
********** ##########
No exemplo acima, criamos uma classe chamada Pattern . A classe contém um método chamado
display()
que está sobrecarregado.
// method with no arguments
display() {...}
// method with a single char type argument
display(char symbol) {...}
Aqui, a função principal de
display()
é imprimir o padrão. No entanto, com base nos argumentos passados, o método está realizando diferentes operações:- imprime um padrão de
*
, se nenhum argumento for passado ou - imprime o padrão do parâmetro, se um único
char
argumento de tipo é passado.
Observação :O método que é chamado é determinado pelo compilador. Por isso, também é conhecido como polimorfismo em tempo de compilação.
3. Sobrecarga do operador Java
Alguns operadores em Java se comportam de maneira diferente com operandos diferentes. Por exemplo,
+
operador está sobrecarregado para realizar adição numérica, bem como concatenação de strings, e- operadores como
&
,|
e!
estão sobrecarregados para operações lógicas e bit a bit.
Vamos ver como podemos obter polimorfismo usando sobrecarga de operadores.
O
+
operador é usado para adicionar duas entidades. No entanto, em Java, o +
operador executa duas operações. 1. Quando
+
é usado com números (números inteiros e números de ponto flutuante), ele realiza adição matemática. Por exemplo,
int a = 5;
int b = 6;
// + with numbers
int sum = a + b; // Output = 11
2. Quando usamos o
+
operador com strings, ele realizará a concatenação de strings (juntará duas strings). Por exemplo,
String first = "Java ";
String second = "Programming";
// + with strings
name = first + second; // Output = Java Programming
Aqui, podemos ver que o
+
operador está sobrecarregado em Java para realizar duas operações:adição e concatenação . Observação :Em linguagens como C++, podemos definir operadores para funcionar de maneira diferente para operandos diferentes. No entanto, Java não suporta sobrecarga de operador definida pelo usuário.
Variáveis polimórficas
Uma variável é chamada polimórfica se se referir a valores diferentes sob condições diferentes.
Variáveis de objeto (variáveis de instância) representam o comportamento de variáveis polimórficas em Java. Isso ocorre porque as variáveis de objeto de uma classe podem se referir a objetos de sua classe, bem como a objetos de suas subclasses.
Exemplo:variáveis polimórficas
class ProgrammingLanguage {
public void display() {
System.out.println("I am Programming Language.");
}
}
class Java extends ProgrammingLanguage {
@Override
public void display() {
System.out.println("I am Object-Oriented Programming Language.");
}
}
class Main {
public static void main(String[] args) {
// declare an object variable
ProgrammingLanguage pl;
// create object of ProgrammingLanguage
pl = new ProgrammingLanguage();
pl.display();
// create object of Java class
pl = new Java();
pl.display();
}
}
Saída :
I am Programming Language. I am Object-Oriented Programming Language.
No exemplo acima, criamos uma variável de objeto pl da ProgrammingLanguage classe. Aqui, pl é uma variável polimórfica. Isto é porque,
- Na declaração
pl = new ProgrammingLanguage()
, pl consulte o objeto da ProgrammingLanguage aula. - E, na declaração
pl = new Java()
, pl consulte o objeto do Java aula.
Este é um exemplo de upcasting em Java.
Java
- Operadores Java
- Interface Java
- Java try-with-resources
- Anotações Java
- Tipos de anotação Java
- Método String Length () em Java:como encontrar com exemplo
- Método Java String indexOf() com substring e exemplos
- Método Java String charAt() com exemplo
- Java String EndsWith() Método com Exemplo
- Java String replace(), replaceAll() e método replaceFirst()