Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> java

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 следующими способами:

  1. Переопределение метода
  2. Перегрузка метода
  3. Перегрузка оператора
<час>

Переопределение метода 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() это распечатать шаблон. Однако в зависимости от переданных аргументов метод выполняет разные операции:

Примечание :вызываемый метод определяется компилятором. Следовательно, он также известен как полиморфизм времени компиляции.

<час>

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 является полиморфной переменной. Это потому, что

Это пример преобразования в Java.


java

  1. Операторы Java
  2. Java-интерфейс
  3. Java-проба с ресурсами
  4. Java-аннотации
  5. Типы аннотаций Java
  6. Метод String Length() в Java:как найти на примере
  7. Метод Java String indexOf() с подстрокой и примерами
  8. Метод Java String charAt() с примером
  9. Метод Java String endWith() с примером
  10. Java String replace(), replaceAll() и replaceFirst()