Java-полиморфизм
Полиморфизм Java
В этом руководстве мы узнаем о полиморфизме Java и его реализации с помощью примеров.
Полиморфизм — важная концепция объектно-ориентированного программирования. Это просто означает более одной формы.
То есть один и тот же объект (метод, оператор или объект) может выполнять разные операции в разных сценариях.
<час>Пример:полиморфизм 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();
}
}
Вывод
Rendering Square... Rendering Circle...
В приведенном выше примере мы создали суперкласс:Polygon. и два подкласса:Square и Круг . Обратите внимание на использование render()
метод.
Основная цель render()
метод заключается в визуализации формы. Однако процесс рендеринга квадрата отличается от процесса рендеринга круга.
Следовательно, render()
Метод ведет себя по-разному в разных классах. Или мы можем сказать render()
является полиморфным.
Почему полиморфизм?
Полиморфизм позволяет нам создавать согласованный код. В предыдущем примере мы также можем создавать разные методы:renderSquare()
и renderCircle()
для рендеринга Квадрат и Круг , соответственно.
Это будет работать отлично. Однако для каждой формы нам нужно создать разные методы. Это сделает наш код несогласованным.
Чтобы решить эту проблему, полиморфизм в Java позволяет нам создать единственный метод render()
которые будут вести себя по-разному для разных фигур.
Примечание :print()
метод также является примером полиморфизма. Он используется для печати значений различных типов, таких как char
. , int
, string
и т. д.
Мы можем добиться полиморфизма в Java следующими способами:
- Переопределение метода
- Перегрузка метода
- Перегрузка оператора
Переопределение метода Java
Во время наследования в Java, если один и тот же метод присутствует как в суперклассе, так и в подклассе. Затем метод в подклассе переопределяет тот же метод в суперклассе. Это называется переопределением метода.
В этом случае один и тот же метод будет выполнять одну операцию в суперклассе и другую операцию в подклассе. Например,
Пример 1. Полиморфизм с использованием переопределения метода
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();
}
}
Вывод :
Java Programming Language Common English Language
В приведенном выше примере мы создали суперкласс с именем Language. и подкласс с именем Java . Здесь метод displayInfo()
присутствует в обоих Language и Java .
Использование displayInfo()
заключается в печати информации. Однако он печатает другую информацию на языке. и Java .
В зависимости от объекта, используемого для вызова метода, печатается соответствующая информация.
<рисунок>
Примечание :вызываемый метод определяется во время выполнения программы. Следовательно, переопределение метода является полиморфизмом времени выполнения. .
<час>2. Перегрузка метода Java
В классе Java мы можем создавать методы с одинаковыми именами, если они отличаются параметрами. Например,
void func() { ... }
void func(int a) { ... }
float func(double a) { ... }
float func(int a, float b) { ... }
В Java это называется перегрузкой методов. Здесь один и тот же метод будет выполнять разные операции в зависимости от параметра.
Пример 3. Полиморфизм с использованием перегрузки методов
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('#');
}
}
Вывод :
********** ##########
В приведенном выше примере мы создали класс с именем Pattern. . Класс содержит метод с именем display()
. который перегружен.
// method with no arguments
display() {...}
// method with a single char type argument
display(char symbol) {...}
Здесь основная функция display()
это распечатать шаблон. Однако в зависимости от переданных аргументов метод выполняет разные операции:
- распечатывает шаблон
*
, если аргумент не передан или - выводит шаблон параметра, если один
char
передается аргумент типа.
Примечание :вызываемый метод определяется компилятором. Следовательно, он также известен как полиморфизм времени компиляции.
<час>3. Перегрузка оператора Java
Некоторые операторы в Java ведут себя по-разному с разными операндами. Например,
+
оператор перегружен для выполнения числового сложения, а также конкатенации строк, и- операторы типа
&
,|
и!
перегружены для логических и побитовых операций.
Давайте посмотрим, как можно добиться полиморфизма с помощью перегрузки операторов.
+
оператор используется для добавления двух объектов. Однако в Java +
оператор выполняет две операции.
1. Когда +
используется с числами (целыми числами и числами с плавающей запятой), он выполняет математическое сложение. Например,
int a = 5;
int b = 6;
// + with numbers
int sum = a + b; // Output = 11
2. Когда мы используем +
оператор со строками, он выполнит конкатенацию строк (объединит две строки). Например,
String first = "Java ";
String second = "Programming";
// + with strings
name = first + second; // Output = Java Programming
Здесь мы видим, что +
оператор перегружен в Java для выполнения двух операций:добавление и объединение .
Примечание :В таких языках, как C++, мы можем определить операторы, которые будут работать по-разному для разных операндов. Однако Java не поддерживает перегрузку определяемых пользователем операторов.
<час>Полиморфные переменные
Переменная называется полиморфной, если она ссылается на разные значения при разных условиях.
Переменные объекта (переменные экземпляра) представляют поведение полиморфных переменных в Java. Это связано с тем, что объектные переменные класса могут ссылаться на объекты этого класса, а также на объекты его подклассов.
Пример:полиморфные переменные
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();
}
}
Вывод :
I am Programming Language. I am Object-Oriented Programming Language.
В приведенном выше примере мы создали объектную переменную pl. языка программирования учебный класс. Вот, pl является полиморфной переменной. Это потому, что
- В операторе
pl = new ProgrammingLanguage()
, pl ссылаться на объект ProgrammingLanguage класс. - И в операторе
pl = new Java()
, pl ссылаться на объект Java класс.
Это пример преобразования в Java.
java
- Операторы Java
- Java-интерфейс
- Java-проба с ресурсами
- Java-аннотации
- Типы аннотаций Java
- Метод String Length() в Java:как найти на примере
- Метод Java String indexOf() с подстрокой и примерами
- Метод Java String charAt() с примером
- Метод Java String endWith() с примером
- Java String replace(), replaceAll() и replaceFirst()