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

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
می کنند. ما اشاره گر هایی به اشیایی از کلاس فرزند را درون متغیری از نوع کلاس پدر قرار داده ایم. بنابراین برای تعیین اینکه کدام متد فراخوانی شود ، نوع شی در زمان اجرا تعیین می شود. به همین دلیل است که به آن چند ریختی زمان اجرا نیز گفته می شود.اکنون ، ما مفهوم چند ریختی را درک کرده ایم. جلسه بعدی به مفهوم انتزاع می پردازد.