جاوا

جلسه ۳۷: تفاوت چندریختی ایستا و پویا در جاوا

class Calculator {

  int add(int num1, int num2) {
    return num1 + num2;
  }

  int add(int num1, int num2, int num3) {
    return num1 + num2 + num3;
  }

  public static void main(String args[]) {
  
    Calculator obj = new Calculator();
    System.out.println("10 + 20 = " + obj.add(10, 20));
    System.out.println("10 + 20 + 30 = " + obj.add(10, 20, 30));
  }
  
}
در اینجا ، ما دو تعریف از یک متد ()add در کلاس Calculator داریم. اینکه کدام متد ()add فراخوانی می شود توسط لیست پارامترها و در زمان کامپایل تعیین می شود. به همین دلیل است که به آن چندریختی زمان کامپایل گفته می شود.

نمونه ای از چند ریختی پویا

// Shape Class
class Shape {

  public double getArea() {
    return 0;
  }
  
}

// A Rectangle is a Shape
class Rectangle extends Shape {   // extended form the Shape class

  private double length;
  private double width;
  
  public Rectangle(double length, double width) {
    this.length = length;
    this.width = width;
  }

  public double getArea() {
    return this.length * this.width;
  }
  
}

// A Circle is a Shape
class Circle extends Shape {

  private double radius;
  
  public Circle(double radius) {
    this.radius = radius;
  }

  public double getArea() {
    return this.radius * this.radius * 3.14;
  }


  public static void main(String args[]) {
    Shape[] shape = new Shape[2]; // Creating the shape array of size 2

    shape[0] = new Circle(2); // creating the circle object at index 0
    shape[1] = new Rectangle(2, 3); // creating the rectangle object at index 1

    System.out.println("Area of Circle: " + shape[0].getArea());
    System.out.println("Area of Rectangle: " + shape[1].getArea());
  }

}
در اینجا ، ما سه کلاس Circle، Shape و Rectangle داریم. Shape یک کلاس والد است در حالی که Circle و Rectangle کلاس های فرزند هستند. کلاسهای فرزند متد ()getArea از کلاس والد را override می کنند. ما اشاره گر هایی به اشیایی از کلاس فرزند را درون متغیری از نوع کلاس پدر قرار داده ایم. بنابراین برای تعیین اینکه کدام متد فراخوانی شود ، نوع شی در زمان اجرا تعیین می شود. به همین دلیل است که به آن چند ریختی زمان اجرا نیز گفته می شود. اکنون ، ما مفهوم چند ریختی را درک کرده ایم. جلسه بعدی به مفهوم انتزاع می پردازد.در این جلسه، با تفاوت های چند ریختی ایستا و پویا آشنا خواهید شد. موارد زیر را بیان خواهیم کرد:
  • انواع چند ریختی
  • چندریختی ایستا و چندریختی پویا
  • نمونه ای از چندریختی ایستا
  • نمونه ای از چند ریختی پویا

انواع چند ریختی

دو نوع چند ریختی وجود دارد:
  • چندریختی ایستا (Static polymorphism) به عنوان چندریختی زمان کامپایل نیز شناخته می شود.
  • چندریختی پویا (Dynamic polymorphism) به عنوان چندریختی زمان اجرا نیز شناخته می شود.

چندریختی ایستا و چندریختی پویا

چندریختی ایستا چندریختی پویا
چندریختی که در زمان کامپایل انجام می شود به عنوان چندریختی ایستا شناخته می شود. چندریختی که در زمان اجرا انجام می شود به عنوان چندریختی پویا شناخته می شود.
اورلود متدها در چندریختی ایستا استفاده می شود. اورراید کردن متد در چندریختی پویا استفاده می شود.

نمونه ای از چندریختی ایستا

class Calculator {

  int add(int num1, int num2) {
    return num1 + num2;
  }

  int add(int num1, int num2, int num3) {
    return num1 + num2 + num3;
  }

  public static void main(String args[]) {
  
    Calculator obj = new Calculator();
    System.out.println("10 + 20 = " + obj.add(10, 20));
    System.out.println("10 + 20 + 30 = " + obj.add(10, 20, 30));
  }
  
}
در اینجا ، ما دو تعریف از یک متد ()add در کلاس Calculator داریم. اینکه کدام متد ()add فراخوانی می شود توسط لیست پارامترها و در زمان کامپایل تعیین می شود. به همین دلیل است که به آن چندریختی زمان کامپایل گفته می شود.

نمونه ای از چند ریختی پویا

// Shape Class
class Shape {

  public double getArea() {
    return 0;
  }
  
}

// A Rectangle is a Shape
class Rectangle extends Shape {   // extended form the Shape class

  private double length;
  private double width;
  
  public Rectangle(double length, double width) {
    this.length = length;
    this.width = width;
  }

  public double getArea() {
    return this.length * this.width;
  }
  
}

// A Circle is a Shape
class Circle extends Shape {

  private double radius;
  
  public Circle(double radius) {
    this.radius = radius;
  }

  public double getArea() {
    return this.radius * this.radius * 3.14;
  }


  public static void main(String args[]) {
    Shape[] shape = new Shape[2]; // Creating the shape array of size 2

    shape[0] = new Circle(2); // creating the circle object at index 0
    shape[1] = new Rectangle(2, 3); // creating the rectangle object at index 1

    System.out.println("Area of Circle: " + shape[0].getArea());
    System.out.println("Area of Rectangle: " + shape[1].getArea());
  }

}
در اینجا ، ما سه کلاس Circle، Shape و Rectangle داریم. Shape یک کلاس والد است در حالی که Circle و Rectangle کلاس های فرزند هستند. کلاسهای فرزند متد ()getArea از کلاس والد را override می کنند. ما اشاره گر هایی به اشیایی از کلاس فرزند را درون متغیری از نوع کلاس پدر قرار داده ایم. بنابراین برای تعیین اینکه کدام متد فراخوانی شود ، نوع شی در زمان اجرا تعیین می شود. به همین دلیل است که به آن چند ریختی زمان اجرا نیز گفته می شود. اکنون ، ما مفهوم چند ریختی را درک کرده ایم. جلسه بعدی به مفهوم انتزاع می پردازد.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا