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

در این جلسه، با مفاهیم چندریختی پویا آشنا خواهید شد.موارد زیر را بیان خواهیم کرد
- چند ریختی پویا چیست؟
- مثالی از چند ریختی پویا
- توضیح
چند ریختی پویا چیست؟
چندریختی پویا مکانیزمی است که به وسیله آن می توان متدها را با نام ، نوع بازگشتی و پارامترهایی یکسان در کلاس پایه و کلاس های مشتق شده تعریف کرد.در مورد اینکه کدام متد
override
شده فراخوانی شود، در زمان اجرا تصمیم گرفته میشود.مثالی از چند ریختی پویا
مثال کلاسShape
را در نظر می گیریم:// 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.width * this.length;
}
}
// A Circle is a Shape
class Circle extends Shape {
private double radius;
public Circle(double radius) {
this.radius = radius;
}
public double getArea() {
return 3.13 * this.radius * this.radius;
}
public static void main(String args[]) {
Shape[] shape = new Shape[2]; // Creating the shape array of size 2
shape[0] = new Circle(3); // 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());
}
}
یک متغیر از کلاس پایه می تواند برای ارجاع به اشیای کلاسهای مشتق شده استفاده شود:Shape obj1 = new Circle(3);
Shape obj2 = new Rectangle(2, 3);
//.
//.
//.
obj1.getArea();
obj2.getArea();
در اینجا ، متغیرهای مرجع obj1
و obj2
از نوع کلاس Shape
هستند ، اما آنها به ترتیب به اشیایی از جنس Circle
و Rectangle
اشاره می کنند.توضیحات:
()obj1.getArea
متد()getArea
از زیر کلاسCircle
را اجرا می کند.()obj2.getArea
متد()getArea
از زیر کلاسRectangle
را اجرا می کند.obj1
اشاره گری به کلاسCircle
است و چون به یک شیCircle
اشاره می کند متد کلاسCircle
را نیز فراخوانی می کند.obj2
اشاره گری به کلاسRectangle
است و چون به یک شیRectangle
اشاره می کند متد کلاسRectangle
را نیز فراخوانی می کند.